Pergunte! - página 31

 
if (FirstRun==1) {

FirstRun=0;

prevtime=Time[0];

}

if ((prevtime == Time[0]) && (CurTime()-prevtime)>MaxTradeTime) {

NewBar=0;

}

else {

prevtime

Encontrei-a! Faremos isso no futuro - Aprenderemos com a ajuda de outros que têm mais conhecimento e sabedoria do que nós em áreas de nossa falta de compreensão! Muito obrigado!

Dave<<<
 

for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)

OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);

if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if(OrderOpenPrice()-Ask>=TrailingStop*Point)

{

if(OrderStopLoss()>Ask+Point*15||OrderStopLoss()==0)

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Modify stop loss and take profit

}

return(0);

}

if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if(Bid-OrderOpenPrice()>=TrailingStop*Point)

{

if(OrderStopLoss()<Bid-Point*15 ||OrderStopLoss()==0)

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Modify stop loss and take profit

}

return(0);

}

return(0);

}

}

Com o formato correto agora, um de vocês muito generoso codificador me ajudaria a resolver esta questão de SL e TP acima. De volta ao meu pedido original. Meu programa de sono desativa a EA em vários momentos. O EA criou negócios abertos antes do modo de sono com 40 - 50 pip Stop Loss, e Take Profit de 100. Pouco antes do EA ser colocado para dormir, quero que o Stop Loss em cada bilhete aberto mude para 15 pips, e o Take Profit mude para 25 pips. O Stop Loss não deve ser uma parada móvel, mas uma parada difícil abaixo (comprar) ou acima (vender) de seu preço comercial atual (assim como o Take Profit). Empreste-me sua experiência e faça meu dia!!

 

Para os trailingstops, use a seguinte função. Acho que está escrito de uma forma que pode ser entendida facilmente. Às vezes, os geeks programadores escrevem código, que pode ser eficiente por uma fração de milissegundos, mas torna um trabalho muito difícil de ler e depurar.

void TrailingAlls(int start,int stop)

{

int profit;

double stoptrade;

double stopcal;

if(stop==0)

return;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))

continue;

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY)

{

profit=NormalizeDouble((Bid-OrderOpenPrice())/Point,0);

if(profit<start)

continue;

stoptrade=OrderStopLoss();

stopcal=Bid-(stop*Point);

if(stoptrade==0||(stoptrade!=0&&stopcal>stoptrade))

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);

}//Long

if(OrderType()==OP_SELL)

{

profit=NormalizeDouble((OrderOpenPrice()-Ask)/Point,0);

if(profit<start)

continue;

stoptrade=OrderStopLoss();

stopcal=Ask+(stop*Point);

if(stoptrade==0||(stoptrade!=0&&stopcal<stoptrade))

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);

}//Shrt

}

}//for

}

Chame-o em seu início usando o seguinte:

TrailingAlls(TrailStartPips,TrailStopPips);

 

Maji, em meu código (que está errado). Eu não quero paradas para trás. Só quero que os bilhetes abertos sejam modificados para que cada compra e venda aberta tenha uma perda de 15 pips de parada dura, e um lucro de 25 pips do preço atual da moeda.

Preciso procurar para ver o que está aberto relacionado com o símbolo da moeda, e depois modificar o stop loss e ter lucro em cada transação aberta. Isso é tudo o que preciso.

Ontem à noite, entramos em uma tangente e entramos em paradas de arrasto - Um mal-entendido entre mim e Phoenix.

Por favor, ajude-me a realizar esta função não muito difícil - Para você, isso sim!

Dave<<<
 

Dave,

Acho que os ingredientes para fazer essa mudança estão lá na rotina que lhe dei.

Caso contrário, você terá que postar seu código ou e-mail para mim e eu posso ver o que posso fazer. Às vezes, é muito difícil ler o código dos outros, por isso talvez seja uma tarefa demorada. Nesse caso, vou jogar minhas mãos para cima.

Boa sorte.

 

Post #309 é o meu código, tal como está, em PHP.

Só preciso mudar as negociações abertas para uma parada dura de 15 e um lucro difícil de 25. Não deve ser demais para um profissional como você para modificar esta codificação.

Dave <<<
 

Dave,

Como eu disse, é muito demorado fazer esse tipo de edição. Estou brincando na minha hora de almoço e aqui está uma tentativa. Se não funcionar, você está por sua conta. Não é testado, então...

Chame isso em seu programa principal pouco antes de instruir o programa a dormir.

Boa sorte.

void ChangeStop(int takeprofit,int stop)

{

double profit;

double stopcal;

if(stop==0)

return;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))

continue;

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY)

{

profit=Ask+(takeprofit*point);

stopcal=Bid-(stop*Point);

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Blue);

}//Long

if(OrderType()==OP_SELL)

{

profit=Bid-(takeprofit*point);

stopcal=Ask+(stop*Point);

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Red);

}//Shrt

}

}//for

}

 

Onde ocorre a modificação? O stop loss original foi de 40, e o take profit foi de 100. Como parte do modo de espera, o stop loss é mudar para 15 em quaisquer ordens abertas existentes e o take profit é mudar para 25 em quaisquer ordens abertas existentes.

Bilhetes de ordens em aberto : Antes do modo de espera.

Antes do modo de espera - 40 Antes do modo de espera - 100 Depois do modo de espera - 15 Depois do modo de espera - 25 Depois do modo de espera - 25

Não estou inicializando as configurações de pedidos, estou modificando os pedidos existentes já feitos e ainda ativos.

Obrigado de qualquer forma por sua ajuda! Por que algo tão simples parece tão difícil?

Dave<<
 

Dave,

Não é difícil. Você terá que estudar um pouco mais a MQ. Verifique o código que eu forneci. Os parâmetros, parada e takeprofit devem ser os números que você deseja usar.

Está tudo aí, você terá que descobrir como usá-lo

 

Atiro a toalha. Eu recebo erros. Usarei o que Phoenix forneceu porque funciona até um ponto com o qual vou viver. Se esta língua tivesse uma escola para aprender nos Estados Unidos, com certeza tornaria minha vida mais fácil. Infelizmente, não há nenhuma.

Obrigado pela contribuição, tanto Maji como Phoenix!

Dave<<<
Razão: