Работа завершена
Техническое задание
ola, boa tarde .
quero um simples EA baseado apenas em duas medias moveis apenas pra operar eurusd no h1, uma media de 9 e uma media de 36
a estrategia e a seguinta quando o preço romper pra cima as duas medias compra ai digamos que o preço ande pra cima e as medias tambem ai sera fechado o trade apenas quando o preço romper as medias pra baixo , rompeu pra baixo a sera fechado a compra e sera feito uma venda ai o preço andando para baixo sera feito apenas o fechamneto quando o preço romper pra cima novamnete fechando uma venda e abrindo uma compra sempre assim fechando um trande e abrindo outro apenas nas confirmaçoes do candle , rompeu ai sera fechado a ordem aberta seja de compra ou venda apenas na confirmaçao seja dando lucro ou prejuizo por que as vezs tera trade que dara prejuizo mais quando der lucro os lucros compensao .e no caso de trade anterior der prejuizo sera feito a proxima entrada com o dobro do lote ou seja primeiro lote 0.01 se deu prejuizo o proximo 0.02
//+------------------------------------------------------------------+
//| SimpleEA.mq4 |
//| Copyright 2023, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
extern int FastMA = 9;
extern int SlowMA = 36;
extern double LotSize = 0.01;
double PreviousLotSize = 0.01;
int ticket;
enum OrderType {NONE, BUY, SELL};
OrderType lastOrderType = NONE;
double FastMAValue[2];
double SlowMAValue[2];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
FastMAValue[1] = iMA(Symbol(), 0, FastMA, 0, MODE_SMA, PRICE_CLOSE, 1);
FastMAValue[0] = iMA(Symbol(), 0, FastMA, 0, MODE_SMA, PRICE_CLOSE, 0);
SlowMAValue[1] = iMA(Symbol(), 0, SlowMA, 0, MODE_SMA, PRICE_CLOSE, 1);
SlowMAValue[0] = iMA(Symbol(), 0, SlowMA, 0, MODE_SMA, PRICE_CLOSE, 0);
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) {
if(OrderCloseTime() != 0) {
if(lastOrderType == BUY && OrderProfit() < 0)
LotSize = PreviousLotSize * 2;
else if(lastOrderType == SELL && OrderProfit() < 0)
LotSize = PreviousLotSize * 2;
else
LotSize = 0.01;
}
}
if(FastMAValue[0] > SlowMAValue[0] && FastMAValue[1] < SlowMAValue[1]) {
if(lastOrderType == SELL && OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) {
OrderClose(ticket, OrderLots(), Bid, 3, clrRed);
}
ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, 0, 0, "Buy order", 12345, 0, clrGreen);
lastOrderType = BUY;
PreviousLotSize = LotSize;
} else if(FastMAValue[0] < SlowMAValue[0] && FastMAValue[1] > SlowMAValue[1]) {
if(lastOrderType == BUY && OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) {
OrderClose(ticket, OrderLots(), Ask, 3, clrGreen);
}
ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, 0, 0, "Sell order", 12345, 0, clrRed);
lastOrderType = SELL;
PreviousLotSize = LotSize;
}
}
//+------------------------------------------------------------------+