[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 686

 

itum:

Comment résoudre ce problème ? Ga

Effectuez la manipulation conditionnelle une seule fois au début de la barre.

Vous pouvez également utiliser un indicateur qui est activé lorsqu'un ordre est passé et réinitialisé lorsque les conditions ont changé de manière significative.

 

Уважаемые програмисты.

Veuillez me dire quoi insérer (et où l'insérer, si possible) dans le code pour que l'EA ouvre une position avec le lot précédent multiplié par 2 si le trade précédent était perdant.

Merci beaucoup.

Je voudrais juste vous poser une question : Que dois-je faire si je veux ouvrir un poste ?

 
Recherchez les EA dont le nom de code est Martingale.
 

Roger:
Ищите советники с кодовым названием Мартингейл.

J'en ai cherché un, mais il ne fonctionne pas pour moi.

J'en ai trouvé un qui devrait doubler un lot si une transaction précédente était perdante, mais il ne veut pas fonctionner.


 
Cela signifie probablement que si l'on vous propose un code ici, vous ne pouvez toujours pas le mettre vous-même dans votre EA, n'est-ce pas ?
 
Roger:
Cela signifie probablement que si l'on vous propose un code ici, vous ne pouvez toujours pas le mettre vous-même dans votre EA, n'est-ce pas ?

Non, cela signifie que l'EA ne fonctionnait pas et que je ne peux pas en trouver une qui fonctionne avec le morceau de code dont j'ai besoin.
 
 
cyclik33:

Non, cela signifie que l'EA ne fonctionnait pas et que je ne peux pas en trouver une qui fonctionne avec le morceau de code dont j'ai besoin.

Dans les variables globales, définissez la valeur initiale du lot :

extern double Lot = 0.1

Là, nous assignons cette valeur à la variable, qui transmettra la valeur du lot à la fonction d'ouverture de position :

double Lots_New = Lot;
Après avoir fermé la position, vérifions les profits/pertes :
if (isLossLastPos(NULL, -1, Magic))
   Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, Magic))
   Lots_New = Lot;

Et la fonction elle-même, grâce à Igor Kim...

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг убыточности последней позиции.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      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 (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderProfit()<0) return(True);
  }
  return(False);
}
 

cyclik33:

Chers programmateurs.
Veuillez me conseiller sur ce qu'il faut insérer (et où l'insérer si possible) dans le code pour que l'EA ouvre une position avec le lot précédent multiplié par 2, si le trade précédent était perdant.
Je vous remercie d'avance.
Boris.

Boris, ce n'est pas difficile du tout, voici une fonction simple qui met en œuvre le principe de la martingale :

//+------------------------------------------------------------------+
double getMartinLot(double lot, double x){         //ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ ДО БАЗОВОГО
   }else{
      save_Lot *= x;                               //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ НА Х РАЗ
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+

Passez le volume initial(double lot), et le pas(double x) comme paramètres.
Insérez la méthode directement dans OrderSend au lieu du paramètre volume.

Exemple d'un appel de fonction:

if(OrdersTotal() == 0){
   OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, 2), Ask, 10, Bid-25*Point, Bid+25*Point);
}
 
Quelqu'un connaît-il un indicateur qui renvoie plusieurs extrema ZigZag récents ?