Em primeiro lugar, eu sei Raptor que você já levantou esta questão comigo antes, mas não consigo lembrar onde você a escreveu, e, mais importante ainda, entender onde estou indo errado?
Tanto quanto sei, eu o escrevi corretamente para que a EA anexada a qualquer par correspondente possa sempre trabalhar apenas com esse par. No momento, notei que o GBPCAD e o GBPUSD parecem não funcionar, o que significa que o GBPCAD acha que o cálculo é feito pelo par GBPUSD... assim, quando uma ordem pendente é acionada, o stop loss flickers dos valores do GBPCAD para o cabo....
Eu uso o magicnumber==1234;
Quaisquer sugestões ou áreas com as quais estou sendo um idiota, por favor, sinta-se à vontade para destacar :(
Seu problema é claro, mas pode ser um pouco difícil de ver por causa da forma como você usa as travessões e condições do aparelho. . você faz isso:
for(int b=OrdersTotal()-1; b>=0; b--) { if(!OrderSelect(b,SELECT_BY_POS,MODE_TRADES))continue; if(OrderType()==OP_BUYSTOP) if(OrderMagicNumber()==MagicNumber) if(OrderSymbol()==Symbol()) // if the symbol matches do . . . if(OrderStopLoss()<iMA(NULL,60,MA_Period,0,1,0,0)-ATR) // . . . . this { Stored_BuyPrice = OrderOpenPrice(); // and this DeleteOrder = OrderDelete(OrderTicket()); // and this } if(OpenOrdersThisPair(Symbol())==0 && DeleteOrder==True)// If there are no open orders = place a new order. // this happens even if the symbol didn't match . . . { int NewBuyOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,Stored_BuyPrice,3,BuyStopPrice,btp,NULL,MagicNumber,0,Green); if(NewBuyOrder == -1)Print("New Buy Order Last Error = ",GetLastError()); } }
Eu acho que o que você quis dizer foi isto . .
for(int b=OrdersTotal()-1; b>=0; b--) { if(!OrderSelect(b, SELECT_BY_POS, MODE_TRADES)) continue; if( OrderType() == OP_BUYSTOP && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() ) { if(OrderStopLoss() < iMA(NULL, 60, MA_Period, 0, 1, 0, 0) - ATR) { Stored_BuyPrice = OrderOpenPrice(); DeleteOrder = OrderDelete(OrderTicket()); } if(OpenOrdersThisPair(Symbol()) == 0 && DeleteOrder) // If there are no open orders = place a new order. { int NewBuyOrder = OrderSend(Symbol(), OP_BUYSTOP, LotSize, Stored_BuyPrice, 3, BuyStopPrice, btp, NULL, MagicNumber, 0, Green); if(NewBuyOrder == -1) Print("New Buy Order Last Error = ", GetLastError()); } } }
Obrigada por me teres descoberto essa parte :)
Ah ok - uma coisinha tão pequena que eu perdi lá. Além disso, quando a primeira função OrderSend() é chamada, eu estou fazendo algo errado lá? Pergunto isto porque estou tentando pensar logicamente sobre se sabe ou não, naquele momento, para qual par o OrderSend() deve ser enviado o pedido? Essa pode ser uma pergunta estúpida, mas eu não estou fazendo nada de errado com essa parte, estou? A parte da função de envio da "BuyTicketOrder"?
Obrigada por me teres descoberto essa parte :)
//+----------------------------------------------------------------------------------------------------------------------------------------+ //Moving Average Trailing Stop Function //+----------------------------------------------------------------------------------------------------------------------------------------+ void MA_Trail() { double ATR = iATR(NULL,60,14,1); double MA = iMA(NULL,60,MA_Period,0,1,0,1); double BuyStopPriceMath = MA - ATR; double SellStopPriceMath = MA + ATR; double BuyStopPrice = NormalizeDouble(BuyStopPriceMath,5); double SellStopPrice = NormalizeDouble(SellStopPriceMath,5); //buy order section - This is where the stop will trail based upon a fixed point value stated on the EA. It will trail with price. for(int b=OrdersTotal()-1; b>=0; b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) if(OrderMagicNumber()==MagicNumber) if(OrderSymbol()==Symbol()) if(OrderType()==OP_BUY) { if(OrderStopLoss() > BuyStopPrice)break; if(OrderStopLoss() < BuyStopPrice) bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(),0,CLR_NONE); if(BuyModify < 0)Print(" Buy Trailing Stop Failed: ", GetLastError()); } } //sell order section - This is where the stop will trail based upon a fixed point value stated on the EA. It will trail with price. for(int s=OrdersTotal()-1; s>=0; s--) { if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES)) if(OrderMagicNumber()==MagicNumber) if(OrderSymbol()==Symbol()) if(OrderType()==OP_SELL) { if(OrderStopLoss() < SellStopPrice)break; if(OrderStopLoss() > SellStopPrice) bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(),0,CLR_NONE); if(SellModify < 0)Print(" Sell Trailing Stop Failed: ", GetLastError()); } } }Ok - eu acho que era isto que estava causando o problema. Acabei de atualizar o código nesta parte e parece que agora parou de piscar cada tique do cabo para os preços do GBPCAD... Agora está preso no preço de uma parada até que se atualize neste fechamento horário... então vou confirmar.
Isso lhe parece bem? Além disso, como tenho estes fechamentos parciais, presumo que provavelmente preciso verificar duas vezes se os aparelhos estão na posição correta em relação a "OrderSymbol()==Symbol())"?
if(OpenOrdersThisPair(Symbol()) == 0Quantas vezes você quer chamar isso? Para cada pedido (seu código)? Para cada pedido pendente no gráfico atual (código do RaptorUK)? Ou UMA VEZ DEPOIS de você armazenar e excluir os pedidos pendentes?
Ok - eu acho que era isto que estava causando o problema. Acabei de atualizar o código nesta parte e parece que agora parou de piscar cada tique do cabo para os preços do GBPCAD... Agora está preso no preço de uma parada até que se atualize neste fechamento horário... então vou confirmar.
Isso lhe parece bem? Além disso, como tenho estes fechamentos parciais, presumo que provavelmente preciso verificar duas vezes se os aparelhos estão na posição correta em relação a "OrderSymbol()==Symbol())"?
Parece OK, sim, sempre verifique seus aparelhos e facilite a sua vida onde quer que você possa, se isso significa adicionar aparelhos então o faça, mas tente ser consistente com os aparelhos e as recuos.
Você não precisa de duas voltas, uma serve ...
//+----------------------------------------------------------------------------------------------------------------------------------------+ //Moving Average Trailing Stop Function //+----------------------------------------------------------------------------------------------------------------------------------------+ void MA_Trail() { double ATR = iATR(NULL,60,14,1); double MA = iMA(NULL,60,MA_Period,0,1,0,1); double BuyStopPriceMath = MA - ATR; double SellStopPriceMath = MA + ATR; double BuyStopPrice = NormalizeDouble(BuyStopPriceMath,5); double SellStopPrice = NormalizeDouble(SellStopPriceMath,5); for(int b=OrdersTotal()-1; b>=0; b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) if(OrderMagicNumber()==MagicNumber) if(OrderSymbol()==Symbol()) { //buy order section - This is where the stop will trail based // upon a fixed point value stated on the EA. It will trail with price. if(OrderType()==OP_BUY) { if(OrderStopLoss() > BuyStopPrice) break; if(OrderStopLoss() < BuyStopPrice) bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(),0,CLR_NONE); if(!BuyModify)Print(" Buy Trailing Stop Failed: ", GetLastError()); } // sell order section - This is where the stop will trail based // upon a fixed point value stated on the EA. It will trail with price. if(OrderType()==OP_SELL) { if(OrderStopLoss() < SellStopPrice) break; if(OrderStopLoss() > SellStopPrice) bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(),0,CLR_NONE); if(!SellModify)Print(" Sell Trailing Stop Failed: ", GetLastError()); } } }
OrderModify() devolve um bool, verdadeiro ou falso, não um int . . . portanto, SellModify nunca será inferior a 0 . . Eu digitei a mesma coisa ontem na ForexFactory
Cada vez que o pedido for excluído - o que eu quero que o pedido pendente seja excluído TODAS as barras de 1 hora fechadas e então um novo pedido aberto com os mesmos parâmetros, OU se aplicável, novas paradas, alvos e tamanho de lote baseado em "if(OrderStopLoss() < iMA(NULL, 60, MA_Period, 0, 1, 0, 0) - ATR) "
A única coisa que preciso armazenar para o NOVO pedido pendente (após a exclusão), é o preço inicial de entrada naquela configuração específica.(Stored_BuyPrice = OrderOpenPrice();)
É engraçado porque aquele primeiro pedaço de código acima também está em conexão com outro tópico que eu estava prestes a postar. Ao invés de postar um novo tópico com uma pergunta semelhante, eu vou perguntar aqui, se estiver tudo bem? Confira o link abaixo - apenas um vídeo de alguns minutos explicando o problema que eu tenho e estou achando difícil de resolver...
Escrevi tanto código, mas agora estou começando a perceber que é um caso das ineficiências que estou tendo que reparar...
Vídeo: http://screencast.com/t/4nl8AaH8Sag
Se eu fiz isto realmente ambíguo com apenas uma quantidade limitada de código, então eu vou enfiar mais algum?
Cada vez que o pedido for excluído - o que eu quero que o pedido pendente seja excluído TODAS as barras de 1 hora fechadas e então um novo pedido aberto com os mesmos parâmetros, OU se aplicável, novas paradas, alvos e tamanho de lote baseado em "if(OrderStopLoss() < iMA(NULL, 60, MA_Period, 0, 1, 0, 0) - ATR) "
A única coisa que preciso armazenar para o NOVO pedido pendente (após a exclusão), é o preço inicial de entrada naquela configuração específica.(Stored_BuyPrice = OrderOpenPrice();)
É engraçado porque aquele primeiro pedaço de código acima também está em conexão com outro tópico que eu estava prestes a postar. Ao invés de postar um novo tópico com uma pergunta semelhante, eu vou perguntar aqui, se estiver tudo bem? Confira o link abaixo - apenas um vídeo de alguns minutos explicando o problema que eu tenho e estou achando difícil de resolver...
Escrevi tanto código, mas agora estou começando a perceber que é um caso das ineficiências que estou tendo que reparar...
Vídeo: http://screencast.com/t/4nl8AaH8Sag
Se eu fiz isto realmente ambíguo com apenas uma quantidade limitada de código, então eu vou enfiar mais algum?
O recuo para a 21 EMA acontece apenas uma vez. De lá, ele deixará de procurar por qualquer recuo para o 21 EMA. O que deve fazer, no entanto, é certificar-se de que a ordem PENDENTE aberta atual esteja precisamente atualizada com os lotes, pare e obtenha lucros APÓS cada hora de fechamento. Entretanto, eu não posso trabalhar, porque às vezes funciona sem falhas, e atualiza a ordem pendente após cada fechamento de H1, e outras vezes não? A razão pela qual a ordem pendente será atualizada por si mesma é devido a"if(OrderStopLoss() < iMA(NULL, 60, MA_Period, 0, 1, 0, 0) - ATR) ".
Se isso não for verdade, então não será - COMO, há inúmeras vezes em que isso é verdade, mas não apagará a ordem e colocará uma nova ordem com os novos valores?
Não tem certeza se você pode ver algo nesse código acima em relação ao vídeo? (Primeiro código que você corrigiu). Espero que isso seja mais claro?
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Tanto quanto sei, eu o escrevi corretamente para que a EA anexada a qualquer par correspondente possa sempre trabalhar apenas com esse par. No momento, notei que o GBPCAD e o GBPUSD parecem não funcionar, o que significa que o GBPCAD acha que o cálculo é feito pelo par GBPUSD... assim, quando uma ordem pendente é acionada, o stop loss flickers dos valores do GBPCAD para o cabo....
Eu uso o magicnumber==1234;
Quaisquer sugestões ou áreas com as quais estou sendo um idiota, por favor, sinta-se à vontade para destacar :(