[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 581

 
Vovo4ka:

なぜ、利益が出るはずのものが出ないのか...ロットクローズ時ですが、利益が30pp出ているはずなのに、全く違うことが書いてあります...。


このナンセンスは何ですか?"本質的に注文を開くと閉じるの違いを計算する "と要約している?

どの程度のボリュームなのか、知る必要はないのか?点の価格が違ってきますが・・・。

利益はポイントではなく、取引されたポジションの数量に応じて 通貨で計算されます。

 
Vovo4ka:

なぜか利益が出るはずのものが出ない...ロットクローズ時に、逆に30pp利益が出ているはずなのに全く違う書き方になっている...。


注文の利益はポイントではなく、入金通貨 になります。

 

正解 - ここでは、損失で閉じたLOCAL注文の履歴から総損失(ロスカット)を計算します。

これはあなたにとって少し違うことですが、原理は同じです。

//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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;
               }
            }
         }
      }
   }
 
PapaYozh:


注文の利益はpipsではなく、入金した通貨で表示されます。


ロットは1固定だが、損益が実際のものと一致しないので、利益とドローダウンのpips数を簡単に計算して、合計して結果を出したい。)
 
Roman.:

正解 - ここでは、損失で閉じたLOCAL注文の履歴から総損失(ロスカット)を計算します。

これはあなたにとって少し違うことですが、原理は同じです。


ありがとうございます、これから対応します=)
 
Vovo4ka:

pips単位で欲しい、ロットは1固定なんだけど...損益が実際と対応してない...利益とドローダウンのpips数を簡単に計算して合計して結果を出したい=)。


もう一度言います。

注文の利益はpipsではなく入金 した通貨で表示されます。

 
Vovo4ka:

だからポイントで必要なんです、ロットは1一定ですが...なぜか損益が実際のものと一致しない...私としては利益とドローダウンのポイント数を簡単に計算して合計して結果を出したいです =)。

まあ、ロットが一定ならテスターの利益をポイントで 割ればいいんだけどね。 利益をpipsで得ることができます。
 

Kim氏が最近公開した関数GetPotentialLossInCurrency(https://forum.mql4.com/ru/11287/page107)は、未決済注文のみをカウントしています。

if (OrderType()==OP_BUY) {
                pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
              }
if (OrderType()==OP_SELL) {
                pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
              }
保留中の注文を 含むように少し拡張してみました(単純に他のタイプを追加することで)。
if (OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP) {
                     pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
                     }
if (OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP) {
                     pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
                  }
が、保留中の注文は考慮されない。数え方が違うのでしょうか?ドキュメントには何も書かれていないのですが...。
 
artmedia70:
すべてのフラグをComment`でチャートに表示すると、なぜトレードが開くのかがわかります。

を入れたら、今度は全く取引が開かなくなった。
ファイル:
1_1.mq4  21 kb
 
Ivn:

入れたら、今は全くsdekを作らない。

なぜ、そんなことを?一つのCommentに 含まれる全てのフラグを一度に出力する。

これです。

int start()
  {
//----


 RefreshRates();                        // Обновление данных
 Symb=Symbol();
 int cnt, ticket, total;
 int ABuy=0;                               // флаг на покупку /продажу   
 int ASell=0;   
 
   Comment(".....Вот сюда и пишите вывод всех флагов......");

 if (NewBar() == true)
{        
     x=x0; //передаем данные 
    x1=x01;
    x2=x02;