クローズドオーダーの利益計算 "HELP" - ページ 3

 
Vitaly Muzichenko:
合わない、10年分の情報がない。

あなたも同じでしょう。

t変数が変化して、愕然としますよ。

シリーズを閉じる前に暗記する必要がある

color ProfitColor;
datetime t;


// START //
//t=TimeCurrent();//разместить в блоке сигнала на закрытие серии ордеров

   if(LastProfitCL(-1)<0) ProfitColor=Red;
   if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
   if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
   ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
   ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  double LastProfit=0;
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
       if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
    
       if (op<0 || OrderType()==op)

        {

          if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
       }

       }
  return(LastProfit);
   }

 
Renat Akhtyamov:

あなたも同じでしょう。

t変数が変化して、愕然としますよ。

シリーズが終了するまでに暗記しなければならない。

試してみましたか?

閉じる前に、閉じるという信号の瞬間に記憶されるのです。

 
Vitaly Muzichenko:
10年分の情報がないのは不向きだ。

現在の利益、、、すべての履歴。

ちなみに、任意の日時に設定することも可能です。

 
Vitaly Muzichenko:

トライ


Comment( LastProfitCL(-1, 0) );

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1, datetime t=0){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
  for(int i=OrdersHistoryTotal()-1;i>=0;i--) {
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
    if((op<0||OrderType()==op) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
     if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
       LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
  }}}} 

 return(LastProfit);
}

プロフィットは新しいものをすべて記憶していますが、その後、未知のものがカウントされます。画面#3では、190ではなく、4であるべきです。

 
Vitaly Muzichenko:

試して みましたか?

閉じる前に、閉じる信号を受信した瞬間に記憶している

コードを読むだけでいい。
 

それも、190

if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
 
Natashe4ka:

プロフィットは新しいものをすべて記憶していますが、その後、未知のものがカウントされます。画面#3では、190ではなく、4であるべきです。

次のコードは、私の場合、正常に動作しますが、おそらくシリーズが正しく閉じられているためです。

ファイル:
info.mq4  9 kb
 
Natashe4ka:

だから、190も

if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();


オーダーをクローズするコマンドはどこにあるのですか?

そこに変数tを書き込んだのでしょうか?

t=TimeCurrent();//разместить в блоке сигнала на закрытие серии ордеров
 
Renat Akhtyamov:

オーダーをクローズするコマンドはどこにあるのですか?

そこに変数tを書き込んだか?

t=TimeCurrent();//一連の注文を決済するためのシグナルブロックを配置する。

もちろん全部ありますよ。

if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
 
Natashe4ka:

もちろん、全部ありますよ。

if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();


いいえ、この行は削除されます。これが利益計算です、そううまくはいきません。

どこのコードで閉じるコマンド - そこに、しかし、そのような行ではない

上記をお読みください。