Sim. Mas como regra geral não se escreve mais de três, porque tal código é difícil de ler mais tarde, especialmente se já passou muito tempo desde que foi escrito. É melhor dividir estes muitos "se" aninhados em funções separadas. Ou use o operador do interruptor ... caso
existe alguma maneira de fazer se eu clicar depois que um novo tick entrar, uma nova janela não aparecerá, mas os valores da primeira janela serão usados?
voidOnTick()
{
if (Orders()<1 && (1==message || !use_MessageBox)){
ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0;
}
if (Orders()<1 && (message==0 || message==2) && use_MessageBox){
if(use_PlaySound) PlaySound ("tick");
message=-2;
message =MessageBox("Текст, содержащий сообщение для отображения", "Необязательный текст для отображения в заголовке", IDOK);
}
if (Orders()<1 && (1==message || !use_MessageBox)){
ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0;
}
}
void Trailing()
{
for (int i=OrdersTotal() - 1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY)
{
if (Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid-Point*(TrailingStop+TrailingStep) || OrderStopLoss() == 0)
{
if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue))
Print("error order modify");
}
}
}
}
}
}
if (OrderType() == OP_SELL)
{
if (OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + Point * (TrailingStop+TrailingStep) || OrderStopLoss() == 0 )
{
if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red))
Print("error order modify");
}
}
}
}
//--------------------------------------------------------
Boa tarde, nos testes de rastreamento funciona como esperado, mas na vida real não, ou apenas de vez em quando, de tempos em tempos, spams com erro OrderModify error 4108, não consigo entender o que está errado, por favor corrija, entendo que a EA não seleciona corretamente as ordens de modificação.
Eu gostaria de descrever minha EA:
Quando dois MAs se cruzam, abrir 2 posições, uma curta e uma longa por magik. O curto fecha em Takei ou na travessia do MA, o longo deve ser arrasto. A seleção de uma posição longa para uma rede de arrasto é feita com um número mágico.
Talvez eu tenha cometido um erro em alguma parte do código na abertura da posição:
//BUYif (fast1>slow1&&fast2<slow2)
{
if (StopLoss_1>0) sl=NormalizeDouble(Bid-StopLoss_1*Point,Digits); else sl=0;
if (TakeProfit_1>0) tp=NormalizeDouble(Ask+TakeProfit_1*Point,Digits); else tp=0;
closeshrts();
OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,0,0,Blue);
}
//BUY_2if (fast1>slow1&&fast2<slow2)
{
if (StopLoss_2>0) sl=NormalizeDouble(Bid-StopLoss_2*Point,Digits); else sl=0;
if (TakeProfit_2>0) tp=NormalizeDouble(Ask+TakeProfit_2*Point,Digits); else tp=0;
closeshrts();
OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,MagicNumber,0,Blue);
}
//SELLif(fast1<slow1&&fast2>slow2)
{
if (TakeProfit_1>0) sl=NormalizeDouble(Ask+StopLoss_1*Point,Digits); else sl=0;
if (StopLoss_1>0) tp=NormalizeDouble(Bid-TakeProfit_1*Point,Digits); else tp=0;
closelongs();
OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,0,0,Red);
}
//SELL_2if(fast1<slow1&&fast2>slow2)
{
if (TakeProfit_2>0) sl=NormalizeDouble(Ask+StopLoss_2*Point,Digits); else sl=0;
if (StopLoss_2>0) tp=NormalizeDouble(Bid-TakeProfit_2*Point,Digits); else tp=0;
closelongs();
OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,MagicNumber,0,Red);
}
Não sei, talvez eu devesse abrir os pedidos através de um loop? E como escrever corretamente este código para que as paradas corretas e Take Profits sejam definidas? Como eu o escrevi - funciona apenas para Vender, para Comprar, define Stop a 0.
O que eu escrevi foi uma citação de um conhecido. Acabo de copiá-lo e colá-lo. Ele está tentando me ensinar MQL. Estou me arrasando, então, por favor escreva o que entra.
O que eu escrevi foi uma citação de um conhecido. Acabo de copiá-lo e colá-lo. Ele está tentando me ensinar MQL. Estou me arrasando, então, por favor escreva o que entra.
a ) um ponto de interrogação ( ?)
b ) contrabarra ( \ )
O uso de caracteres cirílicos é uma característica indocumentada
Os caracteres que podem ser usados em um ID são: dígitos 0-9, letras minúsculas e maiúsculas a-z e A-Z, reconhecíveis como caracteres diferentes, sublinhado caractere (_). O primeiro personagem não pode ser um número.
Até você se cansar de escrevê-los
a sério?))
Sim. Mas como regra geral não se escreve mais de três, porque tal código é difícil de ler mais tarde, especialmente se já passou muito tempo desde que foi escrito. É melhor dividir estes muitos "se" aninhados em funções separadas. Ou use o operador do interruptor ... caso
MessageBox()
existe alguma maneira de fazer se eu clicar depois que um novo tick entrar, uma nova janela não aparecerá, mas os valores da primeira janela serão usados?
Boa tarde, nos testes de rastreamento funciona como esperado, mas na vida real não, ou apenas de vez em quando, de tempos em tempos, spams com erro OrderModify error 4108, não consigo entender o que está errado, por favor corrija, entendo que a EA não seleciona corretamente as ordens de modificação.
Eu gostaria de descrever minha EA:
Quando dois MAs se cruzam, abrir 2 posições, uma curta e uma longa por magik. O curto fecha em Takei ou na travessia do MA, o longo deve ser arrasto. A seleção de uma posição longa para uma rede de arrasto é feita com um número mágico.
Talvez eu tenha cometido um erro em alguma parte do código na abertura da posição:
Não sei, talvez eu devesse abrir os pedidos através de um loop? E como escrever corretamente este código para que as paradas corretas e Take Profits sejam definidas? Como eu o escrevi - funciona apenas para Vender, para Comprar, define Stop a 0.
(Por favor, ajude-me no caminho certo))
) entra.
O que eu escrevi foi uma citação de um conhecido. Acabo de copiá-lo e colá-lo. Ele está tentando me ensinar MQL. Estou me arrasando, então, por favor escreva o que entra.
a ) ponto de interrogação ( ?)
b) contrabarra (\ )
O que eu escrevi foi uma citação de um conhecido. Acabo de copiá-lo e colá-lo. Ele está tentando me ensinar MQL. Estou me arrasando, então, por favor escreva o que entra.
a ) um ponto de interrogação ( ?)
b ) contrabarra ( \ )
O uso de caracteres cirílicos é uma característica indocumentada
Os caracteres que podem ser usados em um ID são: dígitos 0-9, letras minúsculas e maiúsculas a-z e A-Z, reconhecíveis como caracteres diferentes, sublinhado caractere (_). O primeiro personagem não pode ser um número.
sintaxe.
Olá, você poderia me dizer por que ZigD[0] não é emitido em algum momento?