[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 149

 
Vovo4ka:

Ragazzi, dov'è l'errore guarda....a poi apre diverse posizioni al segnale, e a volte manca i segnali....a poi dopo aver innescato uno stop o profitto sulla coppia, ne apre una nuova....

Condizioni di look....: incrocio simultaneo di RSI con periodi 14 e 17 del livello 30 dal basso verso l'alto e uptrend 70 dall'alto verso il basso...


A1=diRSI1;
      A2=diRSI2;
perché cercano le condizioni?
 
Vovo4ka:

Ragazzi, dov'è l'errore guarda....a poi apre diverse posizioni al segnale, e a volte manca i segnali....a poi dopo aver innescato uno stop o profitto sulla coppia, ne apre una nuova....

Condizioni di look....: incrocio simultaneo di RSI con periodi 14 e 17 del livello 30 dal basso verso l'alto e uptrend 70 dall'alto verso il basso...


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

      if (diRSI1>70 && diRSI2>70){
         OpenSell();
         return(0);
      }
Io farei così e imposterei anche un buy stop e non un sell
 
todem:
Io lo farei in questo modo e imposterei un buy Stop e non un sell


Ha... il tuo modo, con qualsiasi valore inferiore a 30 apre un trade!!!!!!! questo è inaccettabile.... ho bisogno di un cross di livello 30 da sotto a sopra!!!!!

e i valori

A1=diRSI1;
      A2=diRSI2;

questi sono solo i valori di RSI dell'apertura della candela precedente.... devono solo essere inferiori a 30 !!! tutto è corretto qui ... solo non capisco perché i trade vengono aperti in pochi pezzi ad un segnale!

 
todem:
Io lo farei in questo modo, e sarebbe impostato non immediatamente a comprare ma a bystop e non a vendere ma a sellstop
 
Vovo4ka:


Ha... your way qualsiasi valore inferiore a 30 apre un trade!!!!!!! questo è inaccettabile.... ho bisogno di un cross di livello 30 dal basso verso l'alto!!!!!

e i valori

Questi sono solo i valori RSI della candela di apertura precedente.... devono solo essere inferiori a 30 !!! tutto è corretto qui ... solo non capisco perché i trade vengono aperti più volte ad un segnale !

Se vuoi fargli aprire un solo trade, non puoi fargliene aprire 386, è molto più veloce di questo, che può eseguire un milione di trade in 1 secondo. Il controllo dell'apertura di un trade è fatto controllando i trade aperti. Se hai un totale di 0 trade, aprili, e se non li hai, hai finito.
 
todem:
Se vuoi che apra un solo trade, non funzionerà - è un computer 386, ed è molto più veloce, che fa un milione di trade in 1 secondo. Il controllo dell'apertura di un trade è fatto controllando i trade aperti. Se hai un totale di 0 trade, aprili, e se non li hai, hai finito.


Hmmm... Questo è il punto, se ci sono un milione di scambi, allora l'affare dovrebbe essere aperto una volta....

OK, lo scoprirò in qualche modo))) se c'è un codice per controllare gli scambi, fatemelo sapere... per favore))

 
Vovo4ka:


Hmmm... questo è il punto - se ci sono un milione di transazioni, allora la transazione dovrebbe essere aperta da una transazione...

ok lo capirò in qualche modo))) se c'è un codice per il controllo delle transazioni, per favore datemelo... per favore))

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
  }
ecco la funzione
 
todem:
ecco la funzione

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

e a questo punto, su quale base si conclude che l'ordine aperto è una vendita o un acquisto?

Ecco l'intero codice qui sopra:

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
  }
 

Qui ho ottimizzato il tuo PSI con il mio consulente

 
//+------------------------------------------------------------------+
//|                                               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);
}
cosa ne pensi di questo consulente?