Como codificar? - página 132

 

Adicionar posição neste EA

Olá,

primeiro devo pedir desculpas porque o inglês não é minha língua nativa.

Como posso modificar este EA para dizer-lhe para adicionar uma posição (comprar 0,1 lotes) no fechamento do bar sempre que o RSI tiver mais de 67, e para vender sempre que o RSI tiver menos de 33?

Por exemplo:

tempo de fechamento do RSI

17:31 1.3855 69,3 ---> comprar 0,1

17:32 1.3858 70,5 ---> comprar 0,1

17:33 1.3849 66,8 ---> nenhuma ação

17:34 1,3856 68,4 ---> comprar 0,1

Posição total +0,03

O mesmo para vender a descoberto.

//+------------------------------------------------------------------+

//| Este MQL é gerado pelo Expert Advisor Builder |

//| Expert Advisor Builder for MetaTrader 4 |

//| |

//| Em nenhum caso o autor será responsável por qualquer dano de qualquer natureza. |

////- Use por sua própria conta e risco. |

//| |

//+------------------- NÃO REMOVA ESTE CABEÇALHO --------------------+

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#propriedade copyright "Expert Advisor Builder"

#link da propriedade "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

número interno externo MagicNumber = 0;

sinal externo boolMail = Falso;

bool externo EachTickMode = Falso;

double Lots externo = 0,1;

Exterior int Slippage = 3;

bool externo UseStopLoss = Falso;

StopLoss int externo = 30;

bool UseTakeProfit externo = Falso;

extern int TakeProfit = 60;

bool UseTrailingStop = Falso;

Exterior int TrailingStop = 30;

int BarCount;

int Current;

bool TickCheck = Falso;

//+------------------------------------------------------------------+

//| função de iniciação de especialista |

//+------------------------------------------------------------------+

int init() {

BarCount = Barras;

se (CadaTickMode) Corrente = 0; caso contrário Corrente = 1;

retorno(0);

}

//+------------------------------------------------------------------+

//| função de desinicialização especializada |

//+------------------------------------------------------------------+

int deinit() {

retorno(0);

}

//+------------------------------------------------------------------+

//| função de início especializado |

//+------------------------------------------------------------------+

int start() {

int Ordem = SIGNAL_NONE;

int Total, Bilhete;

nível duplo StopLossLevel, TakeProfitLevel;

if (CadaTickMode && Bars != BarCount) TickCheck = False;

Total = EncomendasTotal();

Order = SIGNAL_NONE;

//+------------------------------------------------------------------+

//| Início variável |

//+------------------------------------------------------------------+

duplo Buy1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Atual + 0);

duplo Buy1_2 = 67;

duplo Venda1_1 = iRSI(NULL, 0, 10, PREÇO_CLOSE, Atual + 0);

duplo VENDA1_2 = 33;

//+------------------------------------------------------------------+

//| Fim variável |

//+------------------------------------------------------------------+

//Cheque posição

bool IsTrade = Falso;

para (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = Verdadeiro;

if(OrderType() == OP_BUY) {

//Close

//+------------------------------------------------------------------+

//| Início do Sinal (Compra de Saída) |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Fim do sinal (Compra de Saída) |

//+------------------------------------------------------------------+

if (Order === SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

se (!EachTickMode) BarCount = Bars;

IsTrade = Falso;

continuar;

}

// Parada de trilha

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Ponto * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

se (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

{} else {

//Close

//+------------------------------------------------------------------+

//| Início do Sinal (Sair de Venda) |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Fim do sinal (Sair de Venda) |

//+------------------------------------------------------------------+

if (Order === SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

se (!EachTickMode) BarCount = Bars;

IsTrade = Falso;

continuar;

}

// Parada de trilha

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Ponto * TrailingStop)) {

if((OrderStopLoss() > (Pergunte + Ponto * TrailingStop)) ||| (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

se (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Início do sinal (Entrada) |

//+------------------------------------------------------------------+

if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;

se (Vender1_1 < Vender1_2) Encomendar = SINAL_SELL;

//+------------------------------------------------------------------+

//| Fim do sinal |

//+------------------------------------------------------------------+

//Compra

if (Order === SIGNAL_BUY && ((EachTickMode && !TickCheck) ||| (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Cheque margem livre

if (AccountFreeMargin() < (1000 * Lotes)) {

Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());

devolução(0);

}

se (UseStopLoss) StopLossLevel = Perguntar - StopLoss * Ponto; caso contrário, StopLossLevel = 0,0;

if (UseTakeProfitLevel) TakeProfitLevel = Ask + TakeProfitLevel * Ponto; caso contrário TakeProfitLevel = 0,0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Imprimir("Pedido de compra aberto : ", Preço Aberto());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Imprimir("Erro na abertura do pedido de compra : ", GetLastError());

}

}

se (EachTickMode) TickCheck = Verdadeiro;

se (!EachTickMode) BarCount = Bars;

return(0);

}

}

//vender

if (Order === SIGNAL_SELL && ((EachTickMode && !TickCheck) ||| (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Cheque margem livre

if (AccountFreeMargin() < (1000 * Lotes)) {

Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());

devolução(0);

}

se (UseStopLoss) StopLossLevel = Bid + StopLoss * Ponto; caso contrário, StopLossLevel = 0,0;

if (UseTakeProfitLevel) TakeProfitLevel = Bid - TakeProfit * Ponto; caso contrário TakeProfitLevel = 0,0;

Ticket = OrderSend(Symbol(), OP_SELLL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Imprimir("ordem de venda aberta : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Imprimir("Erro na abertura do pedido de VENDA : ", GetLastError());

}

}

se (EachTickMode) TickCheck = Verdadeiro;

se (!EachTickMode) BarCount = Bars;

return(0);

}

}

se (!EachTickMode) BarCount = Bars;

retorno(0);

}

//+------------------------------------------------------------------+

Muito obrigado por sua ajuda

Panurgo

 

Como parar de negociar após o lucro obtido para o dia atual?

Hi.

Eu tenho um problema. Vou codificar um EA.

Quando um lucro de 20 PIP do dia for obtido, o EA não deverá abrir nenhuma ordem até o dia seguinte.

Por favor, me ajude.

Obrigado

fxbeginner

 
fxbeginner:
Hi.

Eu tenho um problema. Eu vou codificar um EA.

Quando um Lucro de 20 PIP do dia for tomado, então a EA não deverá abrir nenhuma ordem até o dia seguinte.

Por favor, me ajude.

Uma idéia seria não permitir a negociação após a primeira ordem do dia. Após a função fim da ordem(), colocar uma "negociação = falso;".

Em seguida, reinicialize a permissão de negociação a cada novo dia:

if(timeprev!=iTime(Symbol(),PERIOD_D1,0)) { //---- Este é um novo dia

timeprev = iTime(Symbol(),PERIOD_D1,0);

comércio = verdadeiro; }

Depois, quando você verifica seu sinal:

if(trade) { sua condição comercial aqui }

Apenas um exemplo ...

FerruFx

 

Ordens ocultas

Como faço para codificar um EA para esconder todas as ordens de parada de compra ou venda dos olhos curiosos dos Corretores. O EA atual tem Ordens de Parada de Compra e Parada de Venda pendentes.

Obrigado

LF

 
LazyForex:
Como faço para codificar uma EA para esconder todas as ordens de compra ou de venda dos olhos curiosos dos corretores. O EA atual tem Ordens de Compra e de Venda pendentes.

Obrigado

LF

Registre o valor de compra e venda dentro da EA, uma vez que o preço cruza o nível de compra, envie um pedido de compra, e vice-versa para o nível de venda.

 
Devil2000:
Registre o valor de compra e venda dentro da EA, uma vez que o preço cruza o nível de compra, envie um pedido de compra, e vice-versa para o nível de venda.

Obrigado. Enviei-lhe um PM

 

Diga à EA para parar de trabalhar

Olá a todos,

Quase terminei minha primeira EA após quase 7 dias de tentativa e erro e corte e colagem e horas de pesquisa....

Alguém pode me dizer como emitir uma saída ou parar uma função para uma EA?

Quero que a EA apague todas as negociações atuais e pendentes e saia depois de atingir 10.000 no patrimônio líquido. Abaixo está a parte do código até o momento:

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

for (cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

Como você pode ver, a EA olha para o patrimônio líquido e então define o valor de bool da variável StopTrade como verdadeiro. O EA então reconhece o comando e não processa nada sob o StopTrade != verdadeiro para um ciclo, mas então o valor do bool do StopTrade é reinicializado, acho eu, e as negociações continuam.

Em primeiro lugar, existe alguma forma de eu conseguir que isto faça o que eu preciso para fazer da maneira que estou fazendo?

Segundo, existe alguma função que eu possa usar para simplesmente dizer à EA para desistir?

Toda a assistência é muito apreciada.

 

O que há de errado com este código?

Alguém pode me dizer por que estou gerando um erro com este comando no meu EA?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);
My pending order is placed and returns the ticket number as assigned to bTicket, but then bTicket doesn't work in my OrderSelect(). I get an error 0 returned. I tried referencing by SELECT_BY_POS and assigning the returned ticket number to bTicket and it worked fine, but there's no way of knowing what the position number of all of my orders will be just be running the script. Any help is greatly appreciated.
 

A mudança do meu posto não ajudou.

Não posso usar o número mágico porque estou executando o mesmo EA em 8 pares diferentes. Onde está meu posto original para que eu possa segui-lo?

 

O que há de errado com este código?

Alguém pode me dizer por que estou gerando um erro com este comando em minha EA?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);

Meu pedido pendente é colocado e devolve o número do bilhete como atribuído a bTicket, mas então bTicket não funciona em meu OrderSelect(). Eu recebo um erro 0 devolvido. Tentei referenciar por SELECT_BY_POS e atribuir o número do ticket devolvido ao bTicket e funcionou bem, mas não há como saber qual será o número de posição de todos os meus pedidos, apenas executando o script. Qualquer ajuda é muito apreciada.