クローズドオーダーの利益計算 "HELP" - ページ 7 123456789 新しいコメント 削除済み 2016.12.12 17:23 #61 Sergey Gritsay: そして、それはどこに存在するのでしょうか? 変数や配列のどこかに書いているのでしょうか? まずどこに保存しているのかを見せてください、そうすれば次に何をすればいいのかがわかります。 どこにもない。すべて有能に作成し、利益データを収集する必要があります。 Sergey Gritsay 2016.12.12 17:39 #62 Natashe4ka:なるほど、では分解してみると、注文の締切時間があり、締切時間と一致するチケットや注文数がある、ということですね。これらの注文を どのように組み合わせ、利益を計算 するのでしょうか? 簡単なようで、やっぱりわからない。 今のところ、どれが赤くハイライトされているのか、誰もわからない。これらの注文を見つけるには、正確な基準が必要です。ですから、よく言われるように、指で、絵で、などの説明を心がけてください。 Renat Akhtyamov 2016.12.12 17:41 #63 Sergey Gritsay: 今のところ、どれが赤くハイライトされているのか、誰もわからない。これらの注文を見つけるには、正確な基準が必要です。だから、指で言うように、絵などを使って説明してみてください。?なぜ、誰も これを理解できないのか、おそらく自分のことだろう。 もうずっと前から、すべてがクリアになっている。マダムは、プログラムの詳細を誇示することなく、自分一人でやりたいだけなのです。 Vitaly Muzichenko 2016.12.12 18:45 #64 Sergey Gritsay: 今のところ、どれが赤くハイライトされているのか、誰も理解できていない。このような注文を見つけるためには、正確な基準が必要です。このため、指で言うように、絵などを使って説明するようにします。はい、すでに100%動作する状態を示し、レディメイドのコードとして添付しています。また、このコードでは端末の再起動に影響されない方法を採用しており、端末の電源を入れたときに何も失われず、そのまま動作し続けることにも注意が必要です。しかし、ここではテスターでしか使えないホイールを発明しています。Sergey、また、オリジナルのTSコードでは、5つのポジションのシリーズを閉じるときに、閉じる途中の注文も削除され、これは順番に実際の取引では何も良いことにつながらないことに注意してください。一般的には、TS以外は全てクリアしています。 Sergey Gritsay 2016.12.12 20:26 #65 ナターリアが何を得たいのかがわかった気がする//+------------------------------------------------------------------+//| Natashe4ka.mq4 |//| Sergey Gritsay |//| https://www.mql5.com/ru/users/sergey1294 |//+------------------------------------------------------------------+#property copyright "Sergey Gritsay"#property link "https://www.mql5.com/ru/users/sergey1294"#property version "1.00"#property strictinput int Magic=1;//Identification numberdouble Profit=0;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//---//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { color ProfitColor=0;// START // LastProfitCL_1(Profit,TimeCurrent(),-1); if(Profit<0)ProfitColor=clrRed; else if(Profit>0)ProfitColor=clrLimeGreen; else ProfitColor=clrDarkGray; 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(Profit,2)),10,"Arial",ProfitColor);// END START // }//+------------------------------------------------------------------+//Вариант 1//+------------------------------------------------------------------+bool LastProfitCL_1(double &LastProfit,//сюда записываем профит datetime timecurent,// текущее время int op=-1//"op" позиция (-1 любая позиция) ) { double profit=0; int cnt=0; datetime timecurents=0; int total=OrdersHistoryTotal(); for(int i=total-1;i>=0;i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; if(OrderMagicNumber()!=Magic)continue; if(OrderSymbol()!=_Symbol)continue; if(OrderType()>1)continue;// исключим удаленные отложенные ордера if(OrderCloseTime()!=timecurent)continue; if(OrderType()==op || op==-1) { profit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++; } } if(cnt!=0) { LastProfit=profit; return(true); } return(false); }//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Вариант 2 |//+------------------------------------------------------------------+bool LastProfitCL_2(double &LastProfit,//сюда записываем профит datetime timecurent,// текущее время int op=-1//"op" позиция (-1 любая позиция) ) { double profit=0; int cnt=0; datetime timecurents=0; int total=OrdersHistoryTotal(); if(OrderSelect(total-1,SELECT_BY_POS,MODE_HISTORY)) { timecurents=OrderCloseTime(); } for(int i=total-1;i>=0;i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; if(OrderMagicNumber()!=Magic)continue; if(OrderSymbol()!=_Symbol)continue; if(OrderCloseTime()<timecurents)continue; if(OrderType()>1)continue;// исключим удаленные отложенные ордера if(OrderType()==op || op==-1) { profit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++; } } if(cnt!=0) { LastProfit=profit; return(true); } return(false); }//+------------------------------------------------------------------+.... Profit calculation of closed MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 Any questions from newcomers Sergey Gritsay 2016.12.12 20:54 #66 関数の2番目のバージョンを修正bool LastProfitCL_2(double &LastProfit,//сюда записываем профит datetime timecurent,// текущее время int op=-1//"op" позиция (-1 любая позиция) ) { double profit=0; int cnt=0; datetime timecurents=0; int total=OrdersHistoryTotal(); for(int i=total-1;i>=0;i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; if(OrderType()>1)continue;// исключим удаленные отложенные ордера if(OrderType()!=op && op!=-1)continue; if(OrderMagicNumber()!=Magic)continue; if(OrderSymbol()!=_Symbol)continue; if(timecurents==0)timecurents=OrderCloseTime(); // запомним время последнего закрытого ордера if(OrderCloseTime()<timecurents)continue; profit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++; } if(cnt!=0) { LastProfit=profit; return(true); } return(false); }.......... コーディングの方法は? Profit calculation of closed KimIVの便利な機能 削除済み 2016.12.12 21:04 #67 Sergey Gritsay:関数の2番目のバージョンを修正よろしくお願いします。 Variant 1 は正常に動作しません Variant 2 は正常に動作します。 私のバリアントも正常に動作しますが、注文を別の日以上に持ち越すと、値が4.27になるはずなのに、Profit 190がクリアされません。スクリーンショット#3https://www.mql5.com/ru/forum/162930/page3 をご覧ください。//+----------------------------------------------------------------------------+// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |//+----------------------------------------------------------------------------+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); } コーディングの方法は? Profit calculation of closed KimIVの便利な機能 削除済み 2016.12.12 21:12 #68 結論から言うと、問題は注文数ではなく、注文を別の日以上に振り替えることである。 Vitalie Postolache 2016.12.12 21:17 #69 Natashe4ka:結論から言うと、問題は注文数ではなく、注文を別の日以上に振り替えることである。 直列で閉じるのか、何なのか?すべての注文を1サイクルでクローズした場合の転送はどうなりますか? 削除済み 2016.12.12 21:24 #70 Vitalie Postolache: では、シリーズで閉じるのか、それとも何なのか?1サイクルですべてのオーダーをクローズした場合のキャリーオーバーはどうなりますか?注文はシリーズごとにクローズされますが、クローズする条件がない場合は、1日、2日など、注文が集まります。 ただし、受注件数も利益額に影響する。 注文が3つ以上ある場合は、最後に決済された注文に対してのみ値が計算されます。 123456789 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そして、それはどこに存在するのでしょうか? 変数や配列のどこかに書いているのでしょうか? まずどこに保存しているのかを見せてください、そうすれば次に何をすればいいのかがわかります。
なるほど、では分解してみると、注文の締切時間があり、締切時間と一致するチケットや注文数がある、ということですね。これらの注文を どのように組み合わせ、利益を計算 するのでしょうか?
簡単なようで、やっぱりわからない。
今のところ、どれが赤くハイライトされているのか、誰もわからない。これらの注文を見つけるには、正確な基準が必要です。だから、指で言うように、絵などを使って説明してみてください。
?
なぜ、誰も これを理解できないのか、おそらく自分のことだろう。
もうずっと前から、すべてがクリアになっている。
マダムは、プログラムの詳細を誇示することなく、自分一人でやりたいだけなのです。
今のところ、どれが赤くハイライトされているのか、誰も理解できていない。このような注文を見つけるためには、正確な基準が必要です。このため、指で言うように、絵などを使って説明するようにします。
はい、すでに100%動作する状態を示し、レディメイドのコードとして添付しています。また、このコードでは端末の再起動に影響されない方法を採用しており、端末の電源を入れたときに何も失われず、そのまま動作し続けることにも注意が必要です。しかし、ここではテスターでしか使えないホイールを発明しています。
Sergey、また、オリジナルのTSコードでは、5つのポジションのシリーズを閉じるときに、閉じる途中の注文も削除され、これは順番に実際の取引では何も良いことにつながらないことに注意してください。一般的には、TS以外は全てクリアしています。
//| Natashe4ka.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
input int Magic=1;//Identification number
double Profit=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
color ProfitColor=0;
// START //
LastProfitCL_1(Profit,TimeCurrent(),-1);
if(Profit<0)ProfitColor=clrRed;
else if(Profit>0)ProfitColor=clrLimeGreen;
else ProfitColor=clrDarkGray;
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(Profit,2)),10,"Arial",ProfitColor);
// END START //
}
//+------------------------------------------------------------------+
//Вариант 1
//+------------------------------------------------------------------+
bool LastProfitCL_1(double &LastProfit,//сюда записываем профит
datetime timecurent,// текущее время
int op=-1//"op" позиция (-1 любая позиция)
)
{
double profit=0;
int cnt=0;
datetime timecurents=0;
int total=OrdersHistoryTotal();
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderType()>1)continue;// исключим удаленные отложенные ордера
if(OrderCloseTime()!=timecurent)continue;
if(OrderType()==op || op==-1)
{
profit+=OrderProfit()+OrderCommission()+OrderSwap();
cnt++;
}
}
if(cnt!=0)
{
LastProfit=profit;
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Вариант 2 |
//+------------------------------------------------------------------+
bool LastProfitCL_2(double &LastProfit,//сюда записываем профит
datetime timecurent,// текущее время
int op=-1//"op" позиция (-1 любая позиция)
)
{
double profit=0;
int cnt=0;
datetime timecurents=0;
int total=OrdersHistoryTotal();
if(OrderSelect(total-1,SELECT_BY_POS,MODE_HISTORY))
{
timecurents=OrderCloseTime();
}
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderCloseTime()<timecurents)continue;
if(OrderType()>1)continue;// исключим удаленные отложенные ордера
if(OrderType()==op || op==-1)
{
profit+=OrderProfit()+OrderCommission()+OrderSwap();
cnt++;
}
}
if(cnt!=0)
{
LastProfit=profit;
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
関数の2番目のバージョンを修正
datetime timecurent,// текущее время
int op=-1//"op" позиция (-1 любая позиция)
)
{
double profit=0;
int cnt=0;
datetime timecurents=0;
int total=OrdersHistoryTotal();
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderType()>1)continue;// исключим удаленные отложенные ордера
if(OrderType()!=op && op!=-1)continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderSymbol()!=_Symbol)continue;
if(timecurents==0)timecurents=OrderCloseTime(); // запомним время последнего закрытого ордера
if(OrderCloseTime()<timecurents)continue;
profit+=OrderProfit()+OrderCommission()+OrderSwap();
cnt++;
}
if(cnt!=0)
{
LastProfit=profit;
return(true);
}
return(false);
}
..........
関数の2番目のバージョンを修正
よろしくお願いします。
Variant 1 は正常に動作しません
Variant 2 は正常に動作します。
私のバリアントも正常に動作しますが、注文を別の日以上に持ち越すと、値が4.27になるはずなのに、Profit 190がクリアされません。
スクリーンショット#3https://www.mql5.com/ru/forum/162930/page3 をご覧ください。
// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
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);
}
結論から言うと、問題は注文数ではなく、注文を別の日以上に振り替えることである。
では、シリーズで閉じるのか、それとも何なのか?1サイクルですべてのオーダーをクローズした場合のキャリーオーバーはどうなりますか?
注文はシリーズごとにクローズされますが、クローズする条件がない場合は、1日、2日など、注文が集まります。
ただし、受注件数も利益額に影響する。
注文が3つ以上ある場合は、最後に決済された注文に対してのみ値が計算されます。