[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 149

 
Vovo4ka:

Chicos, ¿dónde está el error look....a continuación, abre varias posiciones en la señal, y, a veces se pierde las señales....a continuación, después de la activación de una parada o el beneficio en el par, abre una nueva....

Look.... condiciones: cruce simultáneo del RSI con los periodos 14 y 17 del nivel 30 de abajo a arriba y tendencia alcista 70 de arriba a abajo...


A1=diRSI1;
      A2=diRSI2;
¿por qué están detrás de las condiciones?
 
Vovo4ka:

Chicos, ¿dónde está el error look....a continuación, abre varias posiciones en la señal, y, a veces se pierde las señales....a continuación, después de la activación de una parada o el beneficio en el par, abre una nueva....

Look.... condiciones: cruce simultáneo del RSI con los periodos 14 y 17 del nivel 30 de abajo a arriba y tendencia alcista 70 de arriba a abajo...


 if (( diRSI1<30 && diRSI2<30)){      
         OpenBuy();
         return(0);
      }

      if (diRSI1>70 && diRSI2>70){
         OpenSell();
         return(0);
      }
Yo lo haría así y también pondría un stop de compra y no de venta
 
todem:
Yo lo haría así y pondría un Stop de compra y no de venta


Ha... a tu manera, con cualquier valor inferior a 30 se abre una operación!!!!!!! es inaceptable.... necesito un cruce del nivel 30 desde abajo hacia arriba!!!!!

y los valores

A1=diRSI1;
      A2=diRSI2;

Estos son sólo los valores de RSI de la apertura de la vela anterior.... sólo tienen que ser menos de 30 !!! todo es correcto aquí ... Sólo que no entiendo por qué las operaciones se abren en unas pocas piezas en una señal!

 
todem:
Yo lo haría así, y se pondría no inmediatamente a comprar sino a bystop y no a vender sino a sellstop
 
Vovo4ka:


Ha... a tu manera cualquier valor menor a 30 abre una operación!!!!!!! esto es inaceptable.... necesito un cruce del nivel 30 de abajo hacia arriba!!!!!

y los valores

estos son solo los valores del RSI de la vela de apertura anterior.... solo tienen que ser menores de 30 !!! todo es correcto aquí ... solo que no entiendo porque se abren operaciones varias veces en una señal !

Si quieres que abra una operación, no puedes hacer que abra 386, es mucho más rápido que eso, que puede ejecutar un millón de operaciones en 1 segundo. El control de la apertura de una operación se realiza mediante el control de las operaciones abiertas. Si tienes un total de 0 operaciones, ábrelas, y si no las tienes, ya está.
 
todem:
Si quieres que abra una operación, no funcionará: es un ordenador 386, y es mucho más rápido, que hace un millón de operaciones en 1 segundo. El control de la apertura de una operación se realiza mediante el control de las operaciones abiertas. Si tienes un total de 0 operaciones, ábrelas, y si no las tienes, ya está.


Hmmm... ese es el punto, si hay un millón de intercambios, entonces el acuerdo debe ser abierto una vez....

OK, lo resolveré de alguna manera))) si hay un código para controlar los intercambios, hágamelo saber... por favor))

 
Vovo4ka:


Hmmm... esa es la cuestión - si hay un millón de transacciones, entonces la transacción debe ser abierta por una transacción...

ok, lo resolveré de alguna manera))) si hay un código para el control de las transacciones, por favor démelo... por favor))

int OrdCon(int nap, int MGV)
  {
    int result=0;
    for (int i=0;i<OrdersTotal();i++) {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if ((nap==0) && (OrderSymbol() == Symbol())&& (OrderMagicNumber() == MGV)) {
        result=result+1; // открыт ордер бай 
      }
      if ((nap==1) && (OrderSymbol() == Symbol()) && (OrderMagicNumber() == MGV)) {
        result=result+1; // открытый ордер селл 
      }
    }
    return(result); // 0 means we have no trades
  }
esta es la función
 
todem:
esta es la función

      if ((nap==0) && (OrderSymbol() == Symbol())&& (OrderMagicNumber() == MGV)) {
        result=result+1; // открыт ордер бай 
      }
      if ((nap==1) && (OrderSymbol() == Symbol()) && (OrderMagicNumber() == MGV)) {
        result=result+1; // открытый ордер селл 
      }

y en este punto, ¿en qué se basa la conclusión de que la orden abierta es de venta o de compra?

aquí está todo el código anterior:

int OrdCon(int nap, int MGV)
  {
    int result=0;
    for (int i=0;i<OrdersTotal();i++) {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if ((nap==0) && (OrderSymbol() == Symbol())&& (OrderMagicNumber() == MGV)) {
        result=result+1; // открыт ордер бай 
      }
      if ((nap==1) && (OrderSymbol() == Symbol()) && (OrderMagicNumber() == MGV)) {
        result=result+1; // открытый ордер селл 
      }
    }
    return(result); // 0 means we have no trades
  }
 

Aquí he optimizado su PSI con mi asesor

 
//+------------------------------------------------------------------+
//|                                               20/200 expert.mq4  |
//|                                                    1H   EUR/USD  |
//|                                                    Smirnov Pavel |
//|                                                 www.autoforex.ru |
//+------------------------------------------------------------------+

#property copyright "Smirnov Pavel"
#property link      "www.autoforex.ru"

extern int TakeProfit = 20; // Уровень тейкпрофит в пунктах
extern int StopLoss = 200; // уровень стоплосс в пунктах
extern int TradeTime=18;
extern int t1=7;
extern int t2=2;
extern int delta=7;
extern int dayout=1;
extern double lot = 0.1;

int ticket;
bool cantrade=true;

int OpenLong(double volume=0.1)
{
  int slippage=10;
  string comment="20/200 expert (Long)";
  color arrow_color=Red;
  int magic=0;

  ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss*Point,
                      Ask+TakeProfit*Point,comment,magic,0,arrow_color);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
    {
      Print("Buy order opened : ",OrderOpenPrice());
      return(0);
    }  
  }
  else 
  {
    Print("Error opening Buy order : ",GetLastError()); 
    return(-1);
  }
}
  
int OpenShort(double volume=0.1)
{
  int slippage=10;
  string comment="20/200 expert (Short)";
  color arrow_color=Red;
  int magic=0;  
  
  ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,Bid+StopLoss*Point,
                      Bid-TakeProfit*Point,comment,magic,0,arrow_color);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
      {
        Print("Sell order opened : ",OrderOpenPrice());
        return(0);
      }  
  }
  else 
  {
    Print("Error opening Sell order : ",GetLastError()); 
    return(-1);
  }
}

int init()
{
  return(0);
}

int deinit()
{   
  return(0);
}

int start()
{
  if((TimeHour(TimeCurrent())>TradeTime)) cantrade=true;  
  // проверяем есть ли открытые ордера ...
  if(OrdersTotal()<1)
  {
    // ... если нет ни одного открытого ордера, то идем дальше
    // проверяем настало ли время для торговли
    if((TimeHour(TimeCurrent())==TradeTime)&&(cantrade)&&(TimeDayOfWeek(TimeCurrent())!=dayout))
    {
      // ... если настало время, то
      if ((Open[t1]-Open[t2])>delta*Point) //Если цена изменилась на величину delta
      {
        //условие выполнено значит входим в короткую позицию:
        // проверяем есть ли свободные деньги для открытия короткой позиции
        if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)<=0 || GetLastError()==134)
        {
          Print("Not enough money");
          return(0);
        }
        OpenShort(lot);
        cantrade=false; //запрещаем торговать повторно до следующего бара
        return(0);
      }
      if ((Open[t2]-Open[t1])>delta*Point) //Если цена изменилась на величину delta
      {
        // условие выполнено значит входим в длинную позицию
        // проверяем есть ли свободные деньги на счету
        if(AccountFreeMarginCheck(Symbol(),OP_BUY,lot)<=0 || GetLastError()==134)
        {
          Print("Not enough money");
          return(0);
        }
        OpenLong(lot);
        cantrade=false;
        return(0);
      }
    }
  }   
  return(0);
}
¿qué opina de este asesor?
Razón de la queja: