Lavoro terminato
Specifiche
1. Condições
- O programador deve permitir que eu faça backtesting antes de efetuar o pagamento.
- No ato do pagamento o programador deve fornecer o arquivo .mq4.
- O arquivo .mq4 deve compilar sem nenhum "Warning".
- O EA será testado e utilizado no ICMarkets raw account.
- A propriedade intelectual do EA pertence ao contratante.
- O programador não tem nenhuma responsabilidade sobre a eficácia do EA.
- O EA só deve efetuar uma ordem (BUY ou SELL) por vez.
2. Aba de INPUTS
Esta aba deve permitir que o usuário altere os seguintes INPUTS
- input "RANGING_CANDLES" (default 20 - explicado no item 4)
- input "RANGING_LIMIT" (default 200 - explicado no item 4 )
- input "LOT SIZE" (default 0.01)
- input "MAGIC NUMBER" (default 201159)
3. SMAs a serem utilizadas
double sma_7 = iMA (_Symbol,_Period,7,0,MODE_SMA, PRICE_CLOSE,0); //magenta double sma_9 = iMA (_Symbol,_Period,9,0,MODE_SMA, PRICE_CLOSE,0); //cyan double sma_60 = iMA (_Symbol,_Period,60,0,MODE_SMA, PRICE_CLOSE,0); //dashed white4. Função RANGING
Esta função consiste em desenhar 2 linhas no gráfico em uso. A primeira linha (código abaixo) indica a média do fechamento em ALTA do número de velas estabelecido no input "RANGING_CANDLES" . A segunda linha é a média do fechamento em BAIXA do número de velas estabelecido no input "RANGING_CANDLES".
Para gerar esta segunda linha alterar o código abaixo para calcular a média do fechamento em BAIXA (iLowest).
int HighestCandle = iHighest(_Symbol,_Period,MODE_HIGH,10,0);// CANDLES HIGH ObjectDelete("line");// DELETE THE EXISTING LINES ObjectCreate("line",OBJ_HLINE,0,Time[0],High[HighestCandle]);// CREATE LINE, HIGHEST PRICE, STARTING FROM CANDLE 0 );
4.1 Setando a variável "Ranging"
Esta variável é calculada pela DIFERENÇA entre a média do fechamento em ALTA e a média do fechamento em BAIXA.
Quando esta diferença for < ou = ao valor setado no input "RANGING_LIMIT" a variável "Ranging" será = 1. Caso contrário será = 0.
O estado desta variável será utilizado para definir se ordens (sejam BUY ou SELL) serão colocadas ou não.
5. Lógica para ABRIR ordem BUY ou SELL
NOTA
Não tenho certeza se a sintaxe deste item (5) e do (6) está correta.
Por favor corrigir onde necessário.
if((OrdersTotal() == 0) && (Ranging == 0)){ if((sma_9 < sma_60) && (sma_7 > sma_9)){ OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,0,"BUY order placed",MagicNumber,0,0,clrGreen); } if((sma_9 > sma_60) && (sma_7 < sma_9)){ OrderSend(Symbol(),OP_SELL,0.01,Ask,3,0,0,"SELL order placed",MagicNumber,0,0,clrRed); } }
6. Lógica para FECHAR ordem BUY ou SELL
if(OrdersTotal() > 0){ if((sma_9 > sma_60) && (sma_7 < sma_9)){ if(OrderType() == OP_BUY){ OrderClose(OrderTicket(),OrderLots(),Bid,3,clrWhite); } } if((sma_9 < sma_60) && (sma_7 > sma_9)){ if(OrderType() == OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Bid,3,clrMagenta); } } }