¿Puedes decirme cómo hacer que no abra una orden con cada nueva vela si se cumplen todas las condiciones? Acabo de insertar este código, realmente comenzó a esperar la confirmación de 4 velas, pero después de abrir una orden 1 vez (cuando se cumplen todas las condiciones) comenzó a abrir una orden en todas las velas subsiguientes, si las condiciones persisten, así es como se ve en el probador.
+ por si acaso, voy a pegar todo el código original, por si acaso me he dejado algo importante:
¿Puedes decirme cómo hacer que no abra una orden con cada nueva vela si se cumplen todas las condiciones? Acabo de insertar este código, realmente comenzó a esperar la confirmación de 4 velas, pero después de abrir una orden 1 vez (cuando se cumplen todas las condiciones) comenzó a abrir una orden en todas las velas subsiguientes, si las condiciones persisten, así es como se ve en el probador.
+ Por si acaso me he perdido algo importante:
Necesito un control (contador) de las órdenes abiertas
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---if(CheckForOpen()==0&&CountTrade(0)==0) // Если сигнал для покупок и нет открытых покупок
{
if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) Print("BUY OK");
}
if(CheckForOpen()==1&&CountTrade(1)==0) // Если сигнал для продаж и нет открытых продаж
{
if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) Print("SELL OK");
}
}
//+----------------------------------------------------------------------------+//| Счетчик ордеров (0)-buy (1)-sell ()-all |//+----------------------------------------------------------------------------+int CountTrade(int ot=-1)
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType()==ot||ot<0) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+int CheckForOpen() // Открытие ордера по методу Пуриа
{
double malw,mas1,mas2,macd;
int res=-1, buy=0, sell=0;
// Считывание параметров индикаторов 3 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
// Считывание параметров индикаторов 2 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
// Считывание параметров индикаторов 1 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
// Считывание параметров индикаторов 0 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
if(buy ==4) res=0;
if(sell==4) res=1;
return(res);
}
Lo he probado, sí, no hay más reentradas. Pero si Countrade lo hace, entonces no habrá reacción a las nuevas señales mientras haya al menos una orden abierta, lo cual es innecesario. Es decir, no debería haber reaperturas después de la 1ª vez, pero también debería haber una entrada a la orden si el malw o/y macd ha cambiado su posición y según las condiciones es una señal + si la sigal se confirma 4 veces seguidas => abrir una posición. Si esto se añade al código, entonces, idealmente, todo debería estar listo. ¿Qué más hay que añadir para esto?
Lo resaltado es lo que he intentado añadir de mí. Como resultado, todo funciona como debería, pero las ofertas se abren sólo en la compra. ¿Cómo puedo hacer que se abra para vender también, quién sabe?
Traté de hacer cambios en el código de MakarFX y esto es lo que tengo en este momento:
Lo resaltado es lo que he intentado añadir de mí. Como resultado, todo funciona como debería, pero las ofertas se abren sólo en la compra. ¿Cómo puedo hacer que se abra para vender también, quién sabe?
Hay dedos para el hecho de que es inadecuado para poner sólo OrderSend, y luego no preocuparse por algo mal. Siempre hay que buscar errores.
Volodya, la pregunta era sobre otra cosa.
Volodya, la pregunta era diferente.
¿Qué es?
¿En qué?
Dobranich)
Tú también.
¿Puedes decirme cómo hacer que no abra una orden con cada nueva vela si se cumplen todas las condiciones? Acabo de insertar este código, realmente comenzó a esperar la confirmación de 4 velas, pero después de abrir una orden 1 vez (cuando se cumplen todas las condiciones) comenzó a abrir una orden en todas las velas subsiguientes, si las condiciones persisten, así es como se ve en el probador.
+ por si acaso, voy a pegar todo el código original, por si acaso me he dejado algo importante:
¿Puedes decirme cómo hacer que no abra una orden con cada nueva vela si se cumplen todas las condiciones? Acabo de insertar este código, realmente comenzó a esperar la confirmación de 4 velas, pero después de abrir una orden 1 vez (cuando se cumplen todas las condiciones) comenzó a abrir una orden en todas las velas subsiguientes, si las condiciones persisten, así es como se ve en el probador.
+ Por si acaso me he perdido algo importante:
Necesito un control (contador) de las órdenes abiertas
Traté de hacer cambios en el código de MakarFX y esto es lo que tengo en este momento:
Lo resaltado es lo que he intentado añadir de mí. Como resultado, todo funciona como debería, pero las ofertas se abren sólo en la compra. ¿Cómo puedo hacer que se abra para vender también, quién sabe?
Traté de hacer cambios en el código de MakarFX y esto es lo que tengo en este momento:
Lo resaltado es lo que he intentado añadir de mí. Como resultado, todo funciona como debería, pero las ofertas se abren sólo en la compra. ¿Cómo puedo hacer que se abra para vender también, quién sabe?