Já estou totalmente desesperado, até acrescentei uma variável de impressão quando ela é enviada para a OnTick... e se isso ajudou :) é sempre falso no OnTick
Boa tarde. Você pode me ajudar a resolver um problema. em um castiçal M15, vários ofícios abrem em uma fila.
Não quero mais do que uma profissão a ser aberta. A lógica por trás da EA é que até que a ordem anterior seja fechada, a próxima não será aberta, mas às vezes uma série de acordos é aberta em um castiçal tão longo. Por favor, informe o que acrescentar ao código para evitar esta situação.
código snippet :
Em bCheckOrders(), não somente as ordens abertas mas também as ordens pendentes (MODE_TRADES) são numeradas.
Boa tarde. Você pode me ajudar a resolver um problema. em um castiçal M15, vários ofícios abrem em uma fila.
Não quero mais do que uma profissão a ser aberta. A lógica por trás da EA é que até que a ordem anterior seja fechada, a próxima não será aberta, mas às vezes uma série de acordos é aberta em um castiçal tão longo. Por favor, informe o que acrescentar ao código para evitar esta situação.
Mikhail Toptunov #: Estou apenas procurando alguém que seja capaz de compartilhar experiência na implementação da integração de indicadores no Expert Advisor
Para poder calcular estes dados em diferentes TFs.
Será que alguém tem uma implementação através de uma aula?
Estou tentando entender a lógica das aulas, seria uma grande ajuda para o aprendizado.
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
}
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfitif(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
{
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
CloseOrder();
}
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
Tente isto, remova bCheckOrders() da OnTick() e coloque-o como destacado.
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfitif(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
{
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
CloseOrder();
}
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на покупку |//+-----------------------------------------------------------------------------------------------+void vOrderOpenBuy()
{
// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Тикет ордераint iOTi = 0;
iOTi = OrderSend(Symbol(), OP_BUY, LOT(), Ask, Slippage, 0, 0, "", Magic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на продажу |//+-----------------------------------------------------------------------------------------------+void vOrderOpenSell()
{
// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Тикет ордера int iOTi = 0;
iOTi = OrderSend(Symbol(), OP_SELL, LOT(), Bid, Slippage, 0, 0, "", Magic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
}
Removido o código desnecessário.
O que isso significa?
Para poder calcular estes dados em diferentes TFs.
Será que alguém tem uma implementação através de uma aula?
Estou tentando entender a lógica das aulas, seria uma grande ajuda para o aprendizado.
Boa tarde. Você pode me ajudar a resolver um problema. em um castiçal M15, vários ofícios abrem em uma fila.
Não quero mais do que uma profissão a ser aberta. A lógica por trás da EA é que até que a ordem anterior seja fechada, a próxima não será aberta, mas às vezes uma série de acordos é aberta em um castiçal tão longo. Por favor, informe o que acrescentar ao código para evitar esta situação.
código snippet :
Um... em iOTi em vOrderModify() sempre = 1, não é um bilhete, mas um resultado positivo da operação OrderSend(), ou seja, valor "1".
Obrigado. O código original não é meu, portanto não mudo nada desnecessariamente. Funciona e funciona.
Isso vai ajudar a resolver meu problema?
Boa tarde. Você pode me ajudar a resolver um problema. em um castiçal M15, vários ofícios abrem em uma fila.
Não quero mais do que uma profissão a ser aberta. A lógica por trás da EA é que até que a ordem anterior seja fechada, a próxima não será aberta, mas às vezes uma série de acordos é aberta em um castiçal tão longo. Por favor, informe o que acrescentar ao código para evitar esta situação.
código snippet :
Estou apenas procurando alguém que seja capaz de compartilhar experiência na implementação da integração de indicadores no Expert Advisor
Para poder calcular estes dados em diferentes TFs.
Será que alguém tem uma implementação através de uma aula?
Estou tentando entender a lógica das aulas, seria uma grande ajuda para o aprendizado.
rates_total = Bars time[] = Time[] open[] = Open[] high[] = High[] low[] = Low[] close[] = Close[]Mostrar OnTick()
Obrigado. O código original não é meu, portanto não mudo nada desnecessariamente. Funciona e funciona.
Isto resolve meu problema de alguma forma?
Tente isto, remova bCheckOrders() da OnTick() e coloque-o como destacado.
Não, eu estava errado, OrderSend() devolve um bilhete ou -1, então não há nada de errado com isso.
Certo.
Terei isso em mente para o futuro.