EA作ってみました
HPやYoutubeをいくつか参考にしてみました
順張りのEAです
2022年9月から2023年9月まで金、1万円、マイクロ口座で0.1で実行!

1万円で始めて、8298円になりました。
終わってますw
一筋縄ではいきませんね~
下は記録としてソースを上げています
絶対勝たないので、利用しないでください!
//+------------------------------------------------------------------+
//| mv-win.mq4 |
//| Copyright 2022, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#include <stdlib.mqh>
//--- input parameters
input int EA_NUMBER = 690406;
input double lots = 0.01;
input datetime stop_start1;
input datetime stop_end1;
input datetime stop_start2;
input datetime stop_end2;
input datetime stop_start3;
input datetime stop_end3;
double max_buy_profit = 0; //最大利益
double max_sell_profit = 0; //最大利益
bool reseted_buy = false;
bool reseted_sell = false;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit() {
//---
if(lots > 0.1) {
printf("エラー:lotsは0.1より大きく出来ません。処理を中断します。");
MessageBox("lotsは0.1より大きく出来ません。処理を中断します。","エラー",0);
return (INIT_PARAMETERS_INCORRECT);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick() {
//---
int buy_ticket = -1;
double buy_lots = 0.0;
double buy_price = 0.0;
int sell_ticket = -1;
double sell_lots = 0.0;
double sell_price = 0.0;
//立ち玉の存在を確認する
int totalOrder = OrdersTotal();
for(int i = 0; i < totalOrder; i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == EA_NUMBER) {
if(OrderType() == OP_BUY) {
buy_ticket = OrderTicket();
buy_lots = OrderLots();
buy_price = OrderOpenPrice();
}
if(OrderType() == OP_SELL) {
sell_ticket = OrderTicket();
sell_lots = OrderLots();
sell_price = OrderOpenPrice();
}
}
}
printf("buy_ticket:%d,sell_ticket:%d",buy_ticket,sell_ticket);
if(buy_ticket != -1 && sell_ticket != -1) {
//もし売りと買いの両方が存在する時は以上なので、すべてを決済し、終了する
closeOrder(Bid,buy_ticket,buy_lots,Blue);
closeOrder(Ask,sell_ticket,sell_lots,Red);
printf("売りと買いの両方の注文が入っています。異常が発生した為、処理を中断します。");
MessageBox("売りと買いの両方の注文が入っています。異常が発生した為、処理を中断します。","エラー",0);
ExpertRemove();
}
//移動平均線も値を取得する
double ma21 = iMA(NULL,0,21,0,MODE_SMMA,PRICE_CLOSE,1);
double ma50 = iMA(NULL,0,50,0,MODE_SMMA,PRICE_CLOSE,1);
//double ma200 = iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,1);
double rsi = iRSI(NULL,0,14,PRICE_CLOSE,1);
double macdSig = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1);
double macdMain = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
double cci = iCCI(NULL,0,13,PRICE_CLOSE,1);
printf("Ask:%f,Bid:%f",Ask,Bid);
printf("ma21:%f,ma50:%f",ma21,ma50);
//printf("ma21:%f,ma50:%f,ma200:%f",ma21,ma50,ma200);
if(buy_ticket == -1 && ma50 > Ask) {
//新たな買い注文を出せるようリセットする
reseted_buy = true;
}
if(sell_ticket == -1 && ma50 < Bid) {
//新たな売り注文を出せるようリセットする
reseted_sell = true;
}
if(buy_ticket != -1) {
if((Bid - buy_price) > max_buy_profit ) {
max_buy_profit = (Bid - buy_price);
}
//買い注文がある時決済を行う
if(ma50 > ma21 ) {
//if(ma50 > ma21 || ma200 > ma21 || ma200 > ma50) {
//移動平均線が、上からma21,ma50,ma200の順が崩れたら買いを損切
closeOrder(Bid,buy_ticket,buy_lots,Blue);
reseted_buy = false;
max_buy_profit = 0;
} else if(ma50 > Bid) {
//価格が、移動平均線のma50の価格より下に行くと買いを損切
closeOrder(Bid,buy_ticket,buy_lots,Blue);
reseted_buy = false;
max_buy_profit = 0;
} else if(macdMain < macdSig) {
closeOrder(Bid,buy_ticket,buy_lots,Blue);
reseted_buy = false;
max_buy_profit = 0;
} else if(max_buy_profit > (Ask - Bid)) {
//価格が、移動平均線のma50とma21差の価格の2倍以上ma21より上に行くと買いを利食い
closeOrder(Bid,buy_ticket,buy_lots,Blue);
reseted_buy = false;
max_buy_profit = 0;
}
}
if(sell_ticket != -1 ) {
if((sell_price - Ask) > max_sell_profit ) {
max_sell_profit = (sell_price - Ask);
}
//売り注文がある時決済を行う
if(ma50 < ma21) {
//if(ma50 < ma21 || ma200 < ma21 || ma200 < ma50) {
//移動平均線が、上からma200,ma50,ma21の順が崩れたら売りを損切
closeOrder(Ask,sell_ticket,sell_lots,Red);
reseted_sell = false;
max_sell_profit = 0;
} else if(ma50 < Ask) {
//価格が、移動平均線のma50の価格より上に行くと売りを損切
closeOrder(Ask,sell_ticket,sell_lots,Red);
reseted_sell = false;
max_sell_profit = 0;
} else if(macdMain > macdSig) {
closeOrder(Ask,sell_ticket,sell_lots,Red);
reseted_sell = false;
max_sell_profit = 0;
} else if(max_sell_profit > (Ask - Bid)) {
//価格が、移動平均線のma50とma21差の価格の2倍以上ma21より下に行くと売りを利食い
closeOrder(Ask,sell_ticket,sell_lots,Red);
reseted_sell = false;
max_sell_profit = 0;
}
}
if(buy_ticket == -1 && sell_ticket == -1) {
//新規注文
printf("rsi:%f",rsi);
if(reseted_buy && macdMain > macdSig && rsi > 50.0 && (Ask - Bid) < (ma21 - ma50) && cci < 100) {
//if(reseted_buy && rsi > 70.0 && (Ask - Bid)<(ma21-ma50)) {
if(Ask > ma21) {
//if(Ask > ma21 && Bid > ma21 && ma21 > ma50) {
//if(Ask > ma21 && Bid > ma21 && ma21 > ma50 && ma50 > ma200) {
int ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, (uint)0.03, 0, 0, "NEW Ask", EA_NUMBER, 0, Blue);
}
}
if(reseted_sell && macdMain < macdSig && rsi < 50.0 && (Ask - Bid) < (ma50 - ma21) && cci > -100) {
//if(reseted_sell && rsi < 30.0 && (Ask - Bid)<(ma50-ma21)) {
if(ma21 > Ask) {
//if(ma21 > Ask && ma21 > Bid && ma50 > ma21) {
//if(ma21 > Ask && ma21 > Bid && ma200 > ma50 && ma50 > ma21) {
int ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, (uint)0.03, 0, 0, "NEW Bid", EA_NUMBER, 0, Red);
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool closeOrder(double close_price,int close_ticket, double close_lots, color close_color) {
if(OrderClose(close_ticket, close_lots, close_price, (uint)0.3,close_color) == false) {
int err_code = GetLastError();
printf("決済エラー[%d],%s", err_code, ErrorDescription(err_code));
return false;
}
return true;
}
//+------------------------------------------------------------------+
