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

 
Aleksey Semenov:
例えば、ターミナルに何百もの未使用のグロブ変数がある場合、そうです - バルクヘッドは悲しいことに終わりますが、そうでない場合は、正しく記述すれば非常に迅速に動作します
独自のログを構築することができます
 
Aleksey Semenov:
例えば、あなたのターミナルが何百もの未使用のglob変数でいっぱいなら、はい - やりすぎは悲しいでしょう、そうでないなら、正しく書けばかなり速く動作します。
反対はしませんが、できればもっと簡単な方法を探したほうがいいと思います。あるいは、私たちは簡単な方法を探しているわけではない)?
 
Vitaly Muzichenko:
私は気にしませんが、できればもっと簡単な方法を探した方がいいと思います。それとも、簡単な方法を探していないのでしょうか?
筆を執るは己にあり
 
Vitaly Muzichenko:
私は気にしませんが、できればもっと簡単な方法を探した方がいいと思います。それとも、簡単な方法を求めていないのでしょうか?
では、その簡単な方法はどこにあるのか、その疑問はまだ解決されていない。
 

必要な機能でありながら、多くのトレーダーが決済した注文の利益を正しく計算できないことを知らずに使用しており、未だに問題を解決できていません。
そのため、LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); というシンプルなソリューションが 機能せず、誰もが自分のコードで履歴注文を ねじ込み続けているのです。

ネットワーク全体でも有能な解決策はない--「google」はそう語る。ということは、みんな標準的な不正解、もしくは正解でもラストオーダーしか使っていないことが判明したのでしょうか。

 
Natashe4ka:

必要な機能であり、多くの方が利用し、決済した注文の利益が正しく考慮されていないことをご存じないようですが、まだ解決していません。
そのため、LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); というシンプルなソリューションが 機能せず、誰もが自分のコードで履歴注文を ねじ込み続けているのです。

ネットワーク全体でも有能な解決策はない--「google」はそう語る。ということは、みんな標準的な不正解、もしくは正解でもラストオーダーしか使っていないことが判明したのでしょうか。

アドバイスしたのですが、伝わらなかったようですね...。
 
Renat Akhtyamov:
アドバイスしたのに、わかってもらえなかった...。

なるほど、では分解してみると、注文の締切時間があり、締切時間と一致するチケットや注文数がある、ということですね。これらの注文をどのように組み合わせ、利益を計算するのでしょうか?
簡単なことのようで、まだ分かっていないのです。

 

正しくカウントされますが、1~3個の注文が決済された場合のみで、3個以上であれば、不明確な値の利益が得られます。
他にここに追加できることはありますか?

//+----------------------------------------------------------------------------+
//     Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  double LastProfit=0;
  datetime t=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 (OrderSymbol()!=Symbol()||OrderMagicNumber()!=magic) continue;
       if (t<OrderCloseTime()) {t=OrderCloseTime();}
       if ((op<0||OrderType()==op) && t==OrderCloseTime()) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
       }
  return(LastProfit);
   }
 
Natashe4ka:

正しくカウントされますが、1~3個の注文が決済された場合のみで、3個以上であれば、不明確な値の利益が得られます。
他にここに追加できることはありますか?

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

自分のコードになぜ、何が書かれているのか」と自問自答してみたことはありますか?

何をどうすればいいかは、すでに上記で3回お伝えしています。

そうしないと死点から動けなくなる。

 
Natashe4ka:

なるほど、では分解してみると、注文の締切時間があり、締切時間と一致するチケットや注文数がある、ということですね。これらの注文をどのように組み合わせ、利益を計算するのでしょうか?
簡単なようで、やっぱりわからない。

これを変数や配列のどこかに保存しているのですか? まず保存している場所を教えてください、そうすれば次に何をすべきかがわかります。