[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 149

 
Vovo4ka:

Les gars, où est l'erreur regardez....a puis ouvre plusieurs positions au signal, et parfois manque les signaux....a puis après avoir déclenché un stop ou un profit sur la paire, ouvre une nouvelle.....

Look.... conditions : croisement simultané du RSI avec les périodes 14 et 17 du niveau 30 de bas en haut et de la tendance haussière 70 de haut en bas ...


A1=diRSI1;
      A2=diRSI2;
pourquoi s'en prennent-ils aux conditions ?
 
Vovo4ka:

Les gars, où est l'erreur regardez....a puis ouvre plusieurs positions au signal, et parfois manque les signaux....a puis après avoir déclenché un stop ou un profit sur la paire, ouvre une nouvelle.....

Look.... conditions : croisement simultané du RSI avec les périodes 14 et 17 du niveau 30 de bas en haut et de la tendance haussière 70 de haut en bas ...


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

      if (diRSI1>70 && diRSI2>70){
         OpenSell();
         return(0);
      }
Je le ferais de cette façon et je fixerais également un stop d'achat et non de vente.
 
todem:
Je le ferais de cette façon et je fixerais un Stop d'achat et non de vente.


Ha... à votre façon, toute valeur inférieure à 30 ouvre une transaction !!!!!!! c'est inacceptable.... j'ai besoin d'un croisement de 30 niveaux de bas en haut !!!!!

et les valeurs

A1=diRSI1;
      A2=diRSI2;

ce sont juste les valeurs du RSI de la bougie précédente en ouverture.... il faut juste qu'elles soient inférieures à 30 ! !! tout est correct ici ... je ne comprends juste pas pourquoi les trades sont ouverts en quelques morceaux à un signal !

 
todem:
Je le ferais de cette façon, et il serait réglé non pas immédiatement pour acheter mais pour arrêter et non pas pour vendre mais pour arrêter.
 
Vovo4ka:


Ha... à votre façon, toute valeur inférieure à 30 ouvre un trade !!!!!!! c'est inacceptable.... j'ai besoin d'un croisement de niveau 30 depuis le bas !!!!!

et les valeurs

ce sont juste les valeurs RSI de la bougie d'ouverture précédente.... elles doivent juste être inférieures à 30 ! !! tout est correct ici ... je ne comprends pas pourquoi les trades sont ouverts plusieurs fois à un signal !

Si vous voulez lui faire ouvrir une transaction, vous ne pouvez pas lui faire ouvrir 386, c'est beaucoup plus rapide que ça, qui peut exécuter un million de transactions en 1 seconde. Le contrôle de l'ouverture d'une transaction se fait en contrôlant les transactions ouvertes. Si vous avez un total de 0 transaction, ouvrez-les, et si vous n'en avez pas, c'est terminé.
 
todem:
Si vous voulez qu'il ouvre une transaction, ça ne marchera pas - c'est un ordinateur 386, et il est beaucoup plus rapide, qui fait un million de transactions en 1 seconde. Le contrôle de l'ouverture d'une transaction se fait en contrôlant les transactions ouvertes. Si vous avez un total de 0 transaction, ouvrez-les, et si vous n'en avez pas, c'est terminé.


Hmmm... c'est le but, s'il y a un million de transactions, alors l'affaire devrait être ouverte une fois....

OK, je vais trouver une solution d'une manière ou d'une autre))) s'il existe un code pour contrôler les échanges, faites-le moi savoir...s'il vous plaît))

 
Vovo4ka:


Hmmm... c'est le problème - s'il y a un million de transactions, alors la transaction devrait être ouverte par une transaction...

ok je vais trouver une solution d'une manière ou d'une autre))) s'il y a un code pour le contrôle des transactions, s'il vous plaît donnez-le moi... s'il vous plaît)))

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
  }
voici la fonction
 
todem:
voici la fonction

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

et à ce stade, sur quelle base peut-on conclure que l'ordre ouvert est soit une vente soit un achat ?

Voici l'ensemble du code ci-dessus :

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
  }
 

Ici, j'ai optimisé votre PSI avec mon conseiller.

 
//+------------------------------------------------------------------+
//|                                               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);
}
que pensez-vous de ce conseiller ?