[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 291

 
Merci à tous, j'ai trouvé la solution... Je l'ai d'abord fait sans IndicatorBuffers(2) ; et ça n'a pas marché...
 

Aide s'il vous plaît avoir un conseiller pour briser les fractales. J'ai ramassé de bons paramètres seulement besoin d'ajouter qu'il définit un lot de martingale (2 plus lorsque vous perdez).ou donner la puissance sur le conseiller ne sera que doubler le lot sans attendre un tirage à 2 à la fois exécuter (si disponible).voici un conseiller :

//+------------------------------------------------------------------+

|| Fractals.mq4 |

//| TO |

//| http://www.forex-tradexperts-to.narod.ru |

//+------------------------------------------------------------------+

#property copyright "TO"

#lien de propriété "http://www.forex-tradexperts-to.narod.ru"





#include <WinUser32.mqh>.


extern int TP_Fract_3=300 ;

extern int SL_Fract_3=200 ;

extern int TP_Fract_11=500 ;

extern int SL_Fract_11=300 ;

extern bool buy_Fract_3=true ;

extern bool sell_Fract_3=true ;

extern bool buy_Fract_11=true ;

extern bool sell_Fract_11=true ;

extern bool podtvergdenie=false ;

extern int tofract=10 ;

extern double lots=0.1 ;

extern int ID = 5452 ;


string com ;

double page ;


int init()

{

com=DoubleToStr(ID,0) ;

spread=MarketInfo(Symbol(),MODE_SPREAD)*Point ;

retour(0) ;

}


int deinit()

{

retour(0) ;

}


datetime t1,t2=0 ;


bool order(double price,int type,string c,int m)

{

int i ;

for(i=OrdersTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

if(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==price && OrderType()==type)return(false) ;

si(i==0)return(true) ;

}

si(OrdersTotal()==0)return(true) ;

}


int start()

{

int i,ret ;

t1=Temps[0] ;

si(t1!=t2)

{

int fract_buy_3=iHighest(Symbol(),Period(),MODE_HIGH,5,1) ;

int fract_sell_3=iLowest(Symbol(),Period(),MODE_LOW,5,1) ;

int fract_buy_11=iHighest(Symbol(),Period(),MODE_HIGH,21,1) ;

int fract_sell_11=iLowest(Symbol(),Period(),MODE_LOW,21,1) ;

if( fract_buy_3==3 && buy_Fract_3==true)

{

if(OrdersTotal()==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5) ;

for(i=OrdersTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==4)

{

OrderModify(OrderTicket(),High[fract_buy_3]+tofract*Point+spread, High[fract_buy_3]+tofract*Point-SL_Fract_3*Point, High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,0,Blue) ;

pause ;

}

if(i==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))

{

if(podtvergdenie)

{

ret=MessageBox("Signal at "+Symbol()+" H1 BUYSTOP "+"{Set Order ?", "Signal", MB_YESNO|MB_ICONQUESTION) ;

if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5) ;

}

if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5) ;

}

}

}

si( fract_sell_3==3 && sell_Fract_3==true)

{

if(OrdersTotal()==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5) ;

for(i=OrdersTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==5)

{

OrderModify(OrderTicket(),Low[fract_sell_3]-tofract*Point,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,0,Red) ;

pause ;

}

if(i==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))

{

if(podtvergdenie)

{

ret=MessageBox("Signal on "+Symbol()+"H1 SELLSTOP "+"{Set Order ?", "Signal", MB_YESNO|MB_ICONQUESTION) ;

if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,5) ;

}

if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point*Point,com,5) ;

}

}

}

si( fract_buy_11==11 && buy_Fract_11==true)

{

if(OrdersTotal()==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))orderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21) ;

for(i=OrdersTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==4)

{

OrderModify(OrderTicket(),High[fract_buy_11]+tofract*Point+spread, High[fract_buy_11]+tofract*Point-SL_Fract_11*Point, High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,0,Blue) ;

pause ;

}

si(i==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21)))

{

if(podtvergdenie)

{

ret=MessageBox("Signal on "+Symbol()+"H4 BUYSTOP "+"{Set Order ?", "Signal", MB_YESNO|MB_ICONQUESTION) ;

if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21) ;

}

if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21) ;

}

}

}

si( fract_sell_11==11 && sell_Fract_11==true)

{

if(OrdersTotal()==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))orderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21) ;

for(i=OrdersTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==5)

{

OrderModify(OrderTicket(),Low[fract_sell_11]-tofract*Point,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,0,Red) ;

pause ;

}

if(i==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))

{

if(podtvergdenie)

{

ret=MessageBox("Signal on "+Symbol()+"H4 BUYSTOP "+"{Set Order ?", "Signal", MB_YESNO|MB_ICONQUESTION) ;

if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,21) ;

}

if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point*Point,com,21) ;

}

}

}

t2=Temps[0] ;

}

retour(0) ;

}

Je suis mauvais en écriture russe, désolé !

 
AppaRat:

Je ne suis pas doué pour écrire le russe, désolé !

Tu ne sais même pas comment insérer un code. Je ne veux pas lire ça.
 

Dites-moi qui peut vous aider avec le bloc Klimov, le problème est qu'il ne retourne pas la valeur du dernier fermé, mais la valeur du dernier fermé par la condition

donc à 2 conditions

bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
и
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);

il renvoie les deux valeurs True,

comment faire pour qu'il retourne uniquement le dernier ordre fermé et non le dernier par une condition,

Voici le code que j'ai ajouté par lots pour ma commodité

//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1, int ll=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
             if (ll<0 || OrderLots()==ll) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
} 
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}



//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1, int ll=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
             if (ll<0 || OrderLots()==ll) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
} 
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
 
FoxUA:

Dites-moi qui peut vous aider avec le bloc Klimov, le problème est qu'il ne retourne pas la valeur du dernier fermé, mais la valeur du dernier fermé par la condition

donc à 2 conditions

il renvoie les deux valeurs True,

comment faire pour qu'il retourne uniquement le dernier ordre fermé et non le dernier par une condition,

J'ai ajouté un contrôle de lot au code pour ma commodité.


Avez-vous ajouté la vérification des lots à cette fonction ? Maintenant, ils vérifient les dernières positions fermées avec le lot passé, et le lot est probablement toujours égal à zéro, ou à un nombre entier. La variable ll doit être de type double. Et pourquoi avons-nous besoin du contrôle du lot ici ?

Vous écrivez ce que vous voulez réaliser, et ils vous le diront :)

 

Oui, et pourquoi le lot est un int ? Le terrain a toujours été double.

Vous pourriez faire ceci : lorsqu'il vous reste une commande, déterminez quelle est la commande restante et recherchez la commande opposée.

 
FoxUA:

Dites-moi qui peut aider avec le bloc Klimov...

Ne doublez pas les messages dans différents fils de discussion, c'est de mauvais goût.
 
artmedia70:

Vérifiez les lots dans la fonction ajoutée par vous-même ? Maintenant, ils vérifient les dernières positions fermées avec le lot passé, et le lot est probablement toujours égal à zéro, ou à un nombre entier. La variable ll doit être de type double. Et pourquoi avons-nous besoin du contrôle du lot ici ?

Vous écrivez ce que vous voulez réaliser, et ils vous le diront :)

J'ai déjà tout réalisé, mais il y a un bug, à un certain moment une commande dont je n'ai pas besoin apparaît,

J'ai essayé de le changer en int, à l'origine c'était double, mais ensuite je l'ai cherché et j'ai oublié de le retourner, et si j'utilise une fonction séparée sans vérification du lot, le résultat ne change pas, donc peut-être que je ne l'ai pas vérifié correctement, aidez-moi à comprendre ce qui ne va pas avec ce bogue

Voici à quoi ressemble la demande

вот так работает без проблем 
bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
bool BuyTakeLotA=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotA);
bool SellstopLotC=isCloseLastPosByStop(NULL,OP_SELL,MagBuy,LotC);
bool SellTakeLotC=isCloseLastPosByTake(NULL,OP_SELL,MagBuy,LotC);

при добовлении вот этих запросов
bool BuystopLotB=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotB);
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);

начинает возвращять True не по одному а по двум запросам 
BuyTakeLotB и BuystopLotA



 
Roger:

Oui, et pourquoi le lot est un int ? Le terrain a toujours été double.

Vous pourriez faire ceci : lorsqu'il vous reste une commande, déterminez quelle est la commande restante et recherchez la commande opposée.


ce n'est pas si simple car les conditions d'ouverture peuvent être 2 sur la vente, et alors cette recherche ne trouvera rien
 
granit77:
Ne doublez pas les messages dans différents fils de discussion, c'est de mauvais goût.

Je suis désolé, j'essaierai de me souvenir de supprimer les mêmes messages dans des fils différents,