[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 391

 
snail09_1:

私なら、クローズするチケットの配列を 作らず、成行注文の列挙ループで、可能な条件をチェックしながら、チケットをクローズ関数の入力に送り、各注文のチェックをします。

コードで示せますか?

というか、これってどうやったら実装できるんだろう?

[Deleted]  

皆さん、こんにちは。

この質問は初心者向けではないのかもしれませんが、他に質問できるスレッドが見つからなかったので、質問させていただきました。

MetaTrader 4から詳細レポートをアンロードして、チャートに残高ではなく資本を表示させるにはどうすればよいですか?MT4とかから都合よくアップロードすれば現実的なのかな?バランスが取れているかどうかは分からないので、ドローダウンの結果だけ知りたいです。

このブローカーをどう使えばいいのか、全くわからない。

[Deleted]  
belous:

コードで示せるか?

というか、どうやって実装するんだ?

こんな感じ?

int ticket;

for(int z=OrdersTotal()-1;z>=0;z--)
   {
   if(!OrderSelect(z,SELECT_BY_POS))
      {
      _GetLastError=GetLastError();
      Print(" OrderSelect(",z,",SELECT_BY_POS)-Error #",_GetLastError);
      continue;
      }
   if(OrderMagicNumber()==magic && OrderSymbol()==Symbol())
      {
      if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
          {
          // Проверим условие для закрытия, и если истинно          
              {
              ticket=OrderTicket();
              //Закрываем его
              }
           }
       }
    }
削除済み  

ヘルプをお願いします。

以下はそのコードです。


//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
        if(BuyLots  > SellLots)money = BuyLots * 10;
        if(BuyLots  < SellLots)money = SellLots * 10;
  if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           

マイナスで取引が成立した時にループを開いて、次の注文がゼロ以上で成立した場合、つまり残高がプラスでもマイナスより少ない場合、マイナスにプラスを足して新しいマイナス値を得るのですが、すでに少なくなっているので、どうしようもないのです。

if(OrderProfit() >= 0 && Sum_Loss < 0.0)
                  double lastLoss_two = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss_two;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
               }

もし、シグナルに従って、よりマイナスになった場合は、注文をクローズして、サイクルを最初から開始します。


状況は、このコードが損失で取引を終了するとき、それはマイナス残高を記憶し、それがプラスで取引を終了し、プラスが残高よりも小さいとき、それはSum_Lossをリセットし、私はそれがゼロにならないと、刈り取られる必要があることである。

だから、今はこうなっているんです。

クローズした注文をチェックし、クローズした注文の利益がゼロより小さければ、その利益をSum_Lossに加え、オープンした取引の利益がSum_Lossを超える(超える予定)まで続け、達した時点で取引をクローズし、Sum_Lossをゼロにして再びサイクルを開始します。

必要なんです。

の注文がマイナスで決済されると、そのマイナス分の利益がSum_Lossに加算され、次の取引がプラスの利益で決済されると、Sum_Lossは利益から受け取った分だけ減少し、つまり次の新規注文Sum_Lossはすでに小さい金額になっており、注文利益がSum_Lossより高くなるまで、Sum_Lossはクリアされて新しいサイクルが始まる。

Sum_Loss = 0;

1回目の決済注文:利益(-50)<0

Sum_Loss + 利益 (Sum_Loss + (-50))

Sum_Loss = -50;

2回目の決済注文:利益(+40)>0かつSum_Loss<0

損失額+利益額 (Sum_Loss + 40)

Sum_Loss = -10


もしかしたら、Sum_Lossは負の変数として指定されるべきなのかもしれません。多くのバリエーションを試しましたが、まだ正しい結果が得られていません。
 
スプレッドを考慮せずにEAをテスト するにはどうすればよいですか?これは可能なのでしょうか?
[Deleted]  
Max79:
スプレッドを考慮せずにEAをテストするにはどうすればよいですか?可能なのでしょうか?
ググれば出てきますよ、例えばここ(set spread ? site:mql4. com)https://www.mql5.com/ru/forum/102224/page2 を読んでみてください。
 

そんなターキーを持っている人はいるのでしょうか?

 

よろしくお願いします。

EAで、保留中の注文のモディファイアを入れたのですが、ジャーナルでテストすると、エラー-1が出ます。

例:「関数のパラメータに未変化の値を渡すと、エラー 1(ERR_NO_RSULT)が発生する」。

改造前にチェックを入れたが、どうにもならない。エラーは何ですか?EAはテスト中ですが、値が変わっていない注文をふるい落とすにはどうしたらよいでしょうか。

 
Run:

こんな七面鳥、誰が持ってるの?

こちらをご覧ください。

http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=45

 
rosomah:

よろしくお願いします。

EAで、保留中の注文のモディファイアを入れたのですが、ジャーナルでテストすると、エラー-1が出ます。

例:「関数のパラメータに未変化の値を渡すと、エラー 1(ERR_NO_RSULT)が発生する」。

改造前にチェックを入れたが、どうにもならない。エラーは何ですか?EAはテスト中ですが、値が変わっていない注文をふるい落とすにはどうしたらよいでしょうか。

値prを印刷し、停止し、OrderModifyに何を送信するかを確認するために取る