Buenas tardes, me pueden ayudar a resolver un problema. en una vela M15, se abren varias operaciones seguidas.
No quiero que se abra más de una operación. La lógica detrás del EA es que hasta que no se cierre la orden anterior, la siguiente no se abrirá, pero a veces una serie de operaciones se abre en una vela tan larga. Por favor, indíqueme qué debo añadir en el código para evitar esta situación.
fragmento de código :
En bCheckOrders() se enumeran no sólo las órdenes abiertas sino también las pendientes (MODE_TRADES).
Buenas tardes, me pueden ayudar a resolver un problema. en una vela M15, se abren varias operaciones seguidas.
No quiero que se abra más de una operación. La lógica detrás del EA es que hasta que no se cierre la orden anterior, la siguiente no se abrirá, pero a veces una serie de operaciones se abre en una vela tan larga. Por favor, indíqueme qué debo añadir en el código para evitar esta situación.
Mikhail Toptunov #: Sólo estoy buscando a alguien que pueda compartir su experiencia en la implementación de la integración de indicadores en el Asesor Experto
Para poder calcular estos datos en diferentes TFs.
Me pregunto si alguien tiene una implementación a través de una clase.
Estoy tratando de entender la lógica de las clases, sería una gran ayuda para el aprendizaje.
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));
}
Prueba esto, quita bCheckOrders() de OnTick() y ponlo como resaltado.
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());
}
}
Se ha eliminado código innecesario.
¿Qué significa?
Para poder calcular estos datos en diferentes TFs.
Me pregunto si alguien tiene una implementación a través de una clase.
Estoy tratando de entender la lógica de las clases, sería una gran ayuda para el aprendizaje.
Buenas tardes, me pueden ayudar a resolver un problema. en una vela M15, se abren varias operaciones seguidas.
No quiero que se abra más de una operación. La lógica detrás del EA es que hasta que no se cierre la orden anterior, la siguiente no se abrirá, pero a veces una serie de operaciones se abre en una vela tan larga. Por favor, indíqueme qué debo añadir en el código para evitar esta situación.
fragmento de código :
Um... en iOTi en vOrderModify() siempre = 1, no es un ticket, sino un resultado positivo de la operación OrderSend() es decir, el valor "1".
Gracias. El código original no es mío, así que no cambio nada innecesariamente. Funciona y funciona.
¿Ayudará esto a resolver mi problema?
Buenas tardes, me pueden ayudar a resolver un problema. en una vela M15, se abren varias operaciones seguidas.
No quiero que se abra más de una operación. La lógica detrás del EA es que hasta que no se cierre la orden anterior, la siguiente no se abrirá, pero a veces una serie de operaciones se abre en una vela tan larga. Por favor, indíqueme qué debo añadir en el código para evitar esta situación.
fragmento de código :
Sólo estoy buscando a alguien que pueda compartir su experiencia en la implementación de la integración de indicadores en el Asesor Experto
Para poder calcular estos datos en diferentes TFs.
Me pregunto si alguien tiene una implementación a través de una clase.
Estoy tratando de entender la lógica de las clases, sería una gran ayuda para el aprendizaje.
rates_total = Bars time[] = Time[] open[] = Open[] high[] = High[] low[] = Low[] close[] = Close[]Mostrar OnTick()
Gracias. El código original no es mío, así que no cambio nada innecesariamente. Funciona y funciona.
¿Resuelve esto mi problema de alguna manera?
Prueba esto, quita bCheckOrders() de OnTick() y ponlo como resaltado.
No, me equivoqué, OrderSend() devuelve una entrada o -1, así que no hay nada malo en ello.
De acuerdo.
Lo tendré en cuenta para el futuro.