クローズドオーダーの利益計算 "HELP" - ページ 8 123456789 新しいコメント Vitalie Postolache 2016.12.12 20:27 #71 Natashe4ka: 注文は一連で決済されますが、決済条件がない場合は、1日、2日など、注文が回収されます。もし、系列が実質的に1周間、例えば1バーの寿命の 間に閉じられたなら、閉じられた時間+1バーで系列の基準を取ることができます。つまり、それ以下の時間帯の注文は全て破棄されます。ただし、これはテスターでしか動作しないため、手動で 操作すると利益計算が正しく行われない(EAの利益のみが考慮され、手動での取引は考慮されない)ことが懸念されます。 削除済み 2016.12.12 20:30 #72 Vitalie Postolache: もし、系列が実質的に1周間、例えば1バーの存続 期間中に閉じられた場合、閉じられた時間に1バーを加えた時間を系列の基準とすることができる。つまり、終了時刻がそれ以下の注文はすべて破棄されるはずである。すなわちif ((op<0||OrderType()==op) && (t==OrderCloseTime() || t==OrderCloseTime()+60)) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}(t==OrderCloseTime()||t==OrderCloseTime()+60)? Vitalie Postolache 2016.12.12 20:31 #73 Natashe4ka:すなわちif ((op<0||OrderType()==op) && t==OrderCloseTime()+60) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();} +60 ?PeriodSeconds() の方がより正しいでしょう。それとも、M1だけで仕事をするのですか?こんな感じ。double lastloss(){ double lastlos=0.0,op=0.0; int cnt=0; datetime time=0; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2) { if(cnt==0) time=OrderCloseTime(); op=OrderProfit()+OrderSwap()+OrderCommission(); if(OrderCloseTime()+PeriodSeconds()<time && op>0.0) break; lastlos+=op; if(cnt!=0) cnt++; } } } return(lastlos);} Profit calculation of closed MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 コーディングの方法は? 削除済み 2016.12.12 20:40 #74 Vitalie Postolache:こんな感じ。これは、前の値に新しい値を追加するものです。しかし、新たにクローズするごとに、利益の値も新しくなる。 Vitalie Postolache 2016.12.12 20:42 #75 また、コメントを上書きしないDCのために、コメントに注文の番号をつけることができます。そして、試しにコメントから数字を出してみると、その数字が順番通りでない時点で、そのシリーズは終了となります。例:受注シリーズ番号1,2,3,4,5。5,4,3,2,1の順で閉じる - ループは1を見て割り込みます。1,2,3,4,5と1(前のシリーズのオーダー番号)の順に閉じる - ループは差分5-1>1を見て、アボートする。これをどのようにコードに変換するか考えないといけない )))) Vitalie Postolache 2016.12.12 20:43 #76 Natashe4ka:つまり、前の値に新しい値が追加されるわけです。そして、新たにクローズするごとに、新たな利益の価値が生まれる。 なんだか、腑に落ちないんです。 削除済み 2016.12.12 20:47 #77 Vitalie Postolache: なんだか、腑に落ちないんです。情報をつけてみると、それが加算されていくのがわかる。color ProfitColor; if(lastloss()<0) ProfitColor=Red; if(lastloss()>0) ProfitColor=LimeGreen; if(lastloss()==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(lastloss(),2)),10,"Arial",ProfitColor); Vitalie Postolache 2016.12.12 21:05 #78 Natashe4ka:情報を入れれば、すぐに何が加算されるかがわかります。 うーん、確かにそうですね...。考え続けよう )))) Renat Akhtyamov 2016.12.12 21:06 #79 テスターでのテストとのことですが...。 削除済み 2016.12.12 21:09 #80 Vitalie Postolache: うーん、確かにそうですね...。考え続けよう ))))また、当然のようにカウントされていると思いました。 この情報をコードに書き込まなければ、もっと簡単に生活できたはずです))そして今、どうしてこの機能が今までちゃんと動かなかったのか、不可解でなりません!!!! 123456789 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
注文は一連で決済されますが、決済条件がない場合は、1日、2日など、注文が回収されます。
もし、系列が実質的に1周間、例えば1バーの寿命の 間に閉じられたなら、閉じられた時間+1バーで系列の基準を取ることができます。つまり、それ以下の時間帯の注文は全て破棄されます。
ただし、これはテスターでしか動作しないため、手動で 操作すると利益計算が正しく行われない(EAの利益のみが考慮され、手動での取引は考慮されない)ことが懸念されます。
もし、系列が実質的に1周間、例えば1バーの存続 期間中に閉じられた場合、閉じられた時間に1バーを加えた時間を系列の基準とすることができる。つまり、終了時刻がそれ以下の注文はすべて破棄されるはずである。
すなわち
(t==OrderCloseTime()||t==OrderCloseTime()+60)?
すなわち
+60 ?
PeriodSeconds() の方がより正しいでしょう。それとも、M1だけで仕事をするのですか?
こんな感じ。
{
double lastlos=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
{
if(cnt==0) time=OrderCloseTime();
op=OrderProfit()+OrderSwap()+OrderCommission();
if(OrderCloseTime()+PeriodSeconds()<time && op>0.0) break;
lastlos+=op;
if(cnt!=0) cnt++;
}
}
}
return(lastlos);
}
こんな感じ。
また、コメントを上書きしないDCのために、コメントに注文の番号をつけることができます。そして、試しにコメントから数字を出してみると、その数字が順番通りでない時点で、そのシリーズは終了となります。
例:受注シリーズ番号1,2,3,4,5。5,4,3,2,1の順で閉じる - ループは1を見て割り込みます。1,2,3,4,5と1(前のシリーズのオーダー番号)の順に閉じる - ループは差分5-1>1を見て、アボートする。これをどのようにコードに変換するか考えないといけない ))))
つまり、前の値に新しい値が追加されるわけです。そして、新たにクローズするごとに、新たな利益の価値が生まれる。
なんだか、腑に落ちないんです。
情報をつけてみると、それが加算されていくのがわかる。
if(lastloss()<0) ProfitColor=Red;
if(lastloss()>0) ProfitColor=LimeGreen;
if(lastloss()==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(lastloss(),2)),10,"Arial",ProfitColor);
情報を入れれば、すぐに何が加算されるかがわかります。
うーん、確かにそうですね...。考え続けよう ))))
また、当然のようにカウントされていると思いました。
この情報をコードに書き込まなければ、もっと簡単に生活できたはずです))
そして今、どうしてこの機能が今までちゃんと動かなかったのか、不可解でなりません!!!!