Em um Expert Advisor com várias moedas, preciso fechar um pedido pendente contra um lucro quando uma posição aberta é acionada.
Agora mesmo, quando eu fecho uma ordem pendente com lucro, todas as ordens pendentes para todas as moedas são fechadas.
Como posso alterar o código para que somente a ordem pendente relacionada a um par de moedas seja fechada e o resto das ordens pendentes permaneçam abertas?
O que devo mudar neste código?
Mn neste código é um número mágico de uma ordem pendente BUY_STOP ou SELL_STOP.
A lógica é que quando uma posição aberta é fechada no Take Profit, este número mágico é deixado e o comando para apagá-lo é suposto ser executado.
Isto funciona ao testar cada par. Entretanto, quando se trabalha com outras moedas, todos os pedidos feitos em todos os pares são excluídos.
Por favor, ajude, se você puder.
Entendo que ninguém deveria se preocupar com este problema, mas talvez alguém tenha um modelo pronto?
Eu ficaria muito grato.
Tive que copiar o código para o editor e fazer algum estilo normal (Ctrl+<) para entender o que você estragou lá.
Então: comentei no código o que estava bagunçado lá em cima:
//+------------------------------------------------------------------+if(OrderMagicNumber()==Mn) // а ордер где-то был выбран ранее?
{
operation=0; // неиспользуемая переменная
{ // лишняя скобкаfor(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS); // нет проверки на результат выделения ордера в списке, и если ордер не выбран, то всё последующее вызовет ошибкиint type = OrderType();
bool result = false;
switch(type)
{ // К СВЕДЕНИЮ - ВСЕ ОПЕРАТОРЫ break ЗАКОММЕНТИРОВАНЫ, А ЗНАЧИТ - ВСЕ СТРОКИ КОДА ОПЕРАТОРА switch ВЫПОЛНЯЮТСЯ ВСЕГДАcase OP_BUYSTOP : // Если выбран отложенный BuyStop, то пытаемся его закрыть как позицию, что вызовет ошибку
result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red); //break;case OP_SELLSTOP : // Если выбран отложенный SellStop, то пытаемся его закрыть как позицию, что вызовет ошибку
result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red); //break;// Независимо от типа выбранного ордера (отложенный или позиция) удаляем его как отложенный, что для позиции вызовет ошибку
result = OrderDelete(OrderTicket()); //break;
}
}
} // лишняя скобка
}
//+------------------------------------------------------------------+
Como resultado, seu código faz isto, ou seja, é equivalente a este código:
//+------------------------------------------------------------------+if(OrderMagicNumber()==Mn) // а ордер где-то был выбран ранее?
{
bool result=false;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS)) {}
result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, clrRed);
result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, clrRed);
result = OrderDelete(OrderTicket());
}
}
//+------------------------------------------------------------------+
Agora pergunte - o que você queria ganhar com isso?
Para entender o que você estragou lá, tive que copiar o código para o editor e fazer um estilo adequado (Ctrl+<).
Então: comentou no código o que você estragou lá em cima:
Como resultado, seu código faz isto, ou seja, é igual a este código:
Agora pergunte - o que você queria ganhar com isso?
OK.
if(OrderMagicNumber()==Mn) // а ордер где-то был выбран ранее?
aqui:
externint mn;//магический номер открытой позицииint Mn=10*mn; //магический номер отложенного ордераint TimFr1=72,TimFr2=24,TimFr3=24;
int start()
{if(Symbol()=="EURUSD")mn=1;if(Symbol()=="GBPUSD")mn=2;if(Symbol()=="USDCHF")mn=3;if(Symbol()=="USDJPY")mn=4;
if(Symbol()=="USDCAD")mn=5;if(Symbol()=="EURGBP")mn=6;if(Symbol()=="AUDUSD")mn=7;if(Symbol()=="NZDUSD")mn=8;
if(Symbol()=="EURJPY")mn=9;if(Symbol()=="EURCHF")mn=10;
Quando uma posição é aberta (OP_BUY ou OP_SELL ), colocamos simultaneamente ordens pendentes (OP_SELLSTOP e OP_BUYSTOP), respectivamente.
Ao fechar uma posição em aberto no take profit, a ordem pendente correspondente a ela deve ser cancelada. Este algoritmo é aplicado a todos os pares de moedas.
Outras encomendas pendentes feitas em outras moedas devem permanecer.
Você pode me dizer se é possível definir a mudança automática do TimeFrame ao mudar o gráfico?
Algo como isto
Criar uma estrutura ou uma matriz multidimensional e deixá-la funcionar na dimensão desejada, se o critério for cumprido, trabalhar com uma coluna (cada coluna é responsável por seu próprio cronograma), se não com outra coluna, e isso é tudo. O programa em si tem acesso a todos os prazos de uma só vez, portanto o que você escreve é possível, mas a implementação é muito extensa e você não pode ver esta quantidade de trabalho no fórum, porque é muito extensa.
typedefdouble(*CenBr)(string,int,int);CenBr cn_br[4];//глобально//В Ините пытюсь сохранить указатель на функцию iOpen и ничего не выходит
cn_br[0]=iOpen;
Funciona com funções simples, mas há algo de estranho nisso.
создаём массив double BarOCLH[1000][2][4]
далее сохраняем цену открытия 0 вого бара дневного таймфрейма
BarOCLH[0,0,0]=iOpen ();
далее сохраняем цену открытия 0 вого бара часового таймфрейма
BarOCLH[0,1,0]=iOpen ();и т.д ну а дальше критерируйте с каким столбцом работать
Sim para você. Você terá que trabalhar através do jogo com prazos em cada detalhe em cada loop e em cada função. É por isso que eu recomendo o uso de matrizes multidimensionais.
Sim para você. Você terá que trabalhar através do jogo com prazos em cada detalhe em cada loop e em cada função. É por isso que eu recomendo o uso de matrizes multidimensionais.
Boa tarde.
Em um Expert Advisor com várias moedas, preciso fechar um pedido pendente contra um lucro quando uma posição aberta é acionada.
Agora mesmo, quando eu fecho uma ordem pendente com lucro, todas as ordens pendentes para todas as moedas são fechadas.
Como posso alterar o código para que somente a ordem pendente relacionada a um par de moedas seja fechada e o resto das ordens pendentes permaneçam abertas?
O que devo mudar neste código?
Mn neste código é um número mágico de uma ordem pendente BUY_STOP ou SELL_STOP.
A lógica é que quando uma posição aberta é fechada no Take Profit, este número mágico é deixado e o comando para apagá-lo é suposto ser executado.
Isto funciona ao testar cada par. Entretanto, quando se trabalha com outras moedas, todos os pedidos feitos em todos os pares são excluídos.
Por favor, ajude, se você puder.
Entendo que ninguém deveria se preocupar com este problema, mas talvez alguém tenha um modelo pronto?
Eu ficaria muito grato.
Tive que copiar o código para o editor e fazer algum estilo normal (Ctrl+<) para entender o que você estragou lá.
Então: comentei no código o que estava bagunçado lá em cima:
Como resultado, seu código faz isto, ou seja, é equivalente a este código:
Agora pergunte - o que você queria ganhar com isso?
Para entender o que você estragou lá, tive que copiar o código para o editor e fazer um estilo adequado (Ctrl+<).
Então: comentou no código o que você estragou lá em cima:
Como resultado, seu código faz isto, ou seja, é igual a este código:
Agora pergunte - o que você queria ganhar com isso?
OK.
aqui:
Quando uma posição é aberta (OP_BUY ou OP_SELL ), colocamos simultaneamente ordens pendentes (OP_SELLSTOP e OP_BUYSTOP), respectivamente.
Ao fechar uma posição em aberto no take profit, a ordem pendente correspondente a ela deve ser cancelada. Este algoritmo é aplicado a todos os pares de moedas.
Outras encomendas pendentes feitas em outras moedas devem permanecer.
Bom dia a todos vocês!
Há um indicador MTF_RSI está mudando
Você pode me dizer se é possível definir a mudança automática do TimeFrame ao mudar o gráfico?
Algo como
Bom dia a todos vocês!
Há um indicador MTF_RSI está mudando
Você pode me dizer se é possível definir a mudança automática do TimeFrame ao mudar o gráfico?
Algo como isto
Criar uma estrutura ou uma matriz multidimensional e deixá-la funcionar na dimensão desejada, se o critério for cumprido, trabalhar com uma coluna (cada coluna é responsável por seu próprio cronograma), se não com outra coluna, e isso é tudo. O programa em si tem acesso a todos os prazos de uma só vez, portanto o que você escreve é possível, mas a implementação é muito extensa e você não pode ver esta quantidade de trabalho no fórum, porque é muito extensa.
Criar uma estrutura ou matriz multidimensional
Obrigado.
Por que este código não funciona?
Funciona com funções simples, mas há algo de estranho nisso.
Obrigado.
Você está falando comigo?
Sim para você. Você terá que trabalhar através do jogo com prazos em cada detalhe em cada loop e em cada função. É por isso que eu recomendo o uso de matrizes multidimensionais.
Sim para você. Você terá que trabalhar através do jogo com prazos em cada detalhe em cada loop e em cada função. É por isso que eu recomendo o uso de matrizes multidimensionais.
Esta questão é resolvida mais facilmente: