[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 686

 

itum:

この問題を解決するには?ガー

コンディションハンドリングは、バーの最初に1回だけ行う。

また、注文が入ると設定され、条件が大きく変化するとリセットされるフラグを実行します。

 

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

前の取引が負けていた場合、EAが前のロットを2倍にしてポジションを開くようにするには、コードに何を挿入すればよいか(可能であれば、どこに挿入すればよいか)教えてください。

ありがとうございました。

ちょっとお聞きしたいのですが、ポジションを開設する場合はどうしたらいいのでしょうか?

 
マーチンゲールというコードネームのEAを探します。
 

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

探していたのですが、私には使えません。

前のトレードが負けていた場合、2倍になるはずのものを見つけたのですが、動作する気がしません。


 
これはおそらく、ここでコードを提供されても、やはり自分ではEAに入れられないということなのでしょうね。
 
Roger:
これはおそらく、ここでコードを提供されても、やはり自分でEAに挿入することはできない、ということですよね?

いいえ、EAが動作せず、私が必要とするコードの一部を含む動作するEAが見つからないということです。
 

https://www.mql5.com/ru/forum/104481 確認してください。

 
cyclik33:

いいえ、EAが動作せず、必要なコードの一部を含む動作するEAが見つからないということです。

グローバル変数に、ロットの初期値を設定します。

extern double Lot = 0.1

そこで、この値を変数に代入し、その変数がロット値をポジションオープン関数に渡します。

double Lots_New = Lot;
ポジションをクローズした後、損益を確認してみましょう。
if (isLossLastPos(NULL, -1, Magic))
   Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, Magic))
   Lots_New = Lot;

そして、この機能自体も、イゴール・キムのおかげで...。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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:

プログラマーの皆様へ。
前の取引が負けていた場合、EAが前のロットを2倍にしてポジションを開くようにするには、コードに何を挿入すればよいか(可能ならどこに挿入すればよいか)教えてください。
あらかじめご了承ください。
ボリス

Borisさん、全然難しくありませんよ。マーチンゲール原理を実装した簡単な関数がこちらです。

//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+

パラメータとして、初期体積(double lot)、ステップ(double x)を渡す。
Volume パラメータの代わりに OrderSend に直接メソッドを挿入します。

関数呼び出しの 例です。

if(OrdersTotal() == 0){
   OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, 2), Ask, 10, Bid-25*Point, Bid+25*Point);
}
 
最近のZigZagの極値を複数返すインジケータをご存知の方はいらっしゃいますか?
理由: