ライブラリ: Report - ページ 16 1...91011121314151617 新しいコメント fxsaber 2025.08.12 20:17 #151 fxsaber #:簡単なことだが、なぜなのか? Report.mqhの最後にそのような項目がある。 static const string REPORT::Shablon = FIELD(N) + FIELD(Ticket) + FIELD(OpenTime) + FIELD(Type) + FIELD(Lots) + FIELD(Symbol) + FIELD(OpenPrice) + FIELD(StopLoss) + FIELD(TakeProfit) + FIELD(CloseTime) + FIELD(ClosePrice) + FIELD(Commission) + FIELD(Swap) + FIELD(Profit) + FIELD(Comment) + FIELD(Pips) + #ifdef REPORT_SLIPPAGE //FIELD(OpenPriceRequest)+FIELD(ClosePriceRequest)+。 FIELD(Slippage) + #endif // report_slippage FIELD(MagicNumber) + FIELD(LengthTime) + FIELD(Balance); カラムを移動/削除するには、それに応じてソース内のこのシーケンスだけを変更する必要がある。 Aleksei Kuznetsov 2025.12.30 10:12 #152 レポートに TurnOver の計算がありますね。 私は同じことをしようとしていますが、MT4Ordesを使用していません。 例として、私はあなたの投稿を見つけましたhttps://www.mql5.com/ru/forum/98421/page2#comment_2908365 結果の一つ:-149,96。符号 - fabs() を削除できます そして、Report 経由の同じ計算: 13,839,230.40。 この例では、計算は 1 つのシンボルに対してのみ行われます CalcHistorySlip( const string Symb) さて、これは各シンボルに対して関数を呼び出すことで解決できます。 MT4OrdersにマッチするMT5用の同等の関数があるかもしれません。そうでなければ、そのままにしておくか、大きなレポートにはまったく含めないつもりです。それがどのように役立つのか明確でないためです。現在、出来高の合計を出力しています。単一シンボルの Expert Advisor の場合、MT4Orders から Volume と TurnOver の合計でソートした結果は同じです。つまり、TurnOver の代わりになるものがあります。しかし、マルチシンボルの場合は異なります。なぜなら、たくさんの異なるシンボルの合計は、金額的には等価ではないからです。TurnOverの方が良いだろう。 そして、MT5用のバリアント(上記リンクのコード)とボリュームによるソートの比較は全く一致しません。 市場シミュレーション(第2回):両建て注文(II) fxsaber 2025.12.30 13:34 #153 Aleksei Kuznetsov #:MT4OrdersにマッチするMT5用の同等のものがあるのでは? そういうことですか? OrderLots() * TickValue * (OrderOpenPrice() + OrderClosePrice()) そうでなければ、そのままにしておくか、大きなレポートにはまったく含めないことにします。それがどのように役立つのか明確でないためです。 取引高 - あなたがいくら稼いだか。通常のブローカーはそこから手数料を計算する。 例えば個別条件が必要な場合、まず取引高を聞かれます。 Stanislav Korotky 2025.12.30 13:38 #154 fxsaber #:そういうことですか?取引高 - あなたがどれだけのお金を挽回したか。通常のブローカーではそこから手数料が計算されます。例えば個別条件が必要な場合、まず取引高を聞かれます。 そうあるべきだと思います: OrderLots() * TickValue * fabs(OrderOpenPrice() - OrderClosePrice()) さらに、シンボルの種類を確認する必要があります。FX以外のブローカーでは、基準通貨から口座の通貨へのティックのコストを計算する必要があるからです(FXの場合、ティックのコストは口座の通貨で直ちに報告されます)。 fxsaber 2025.12.30 13:51 #155 Stanislav Korotky #:そうあるべきだと思う:さらに、シンボルの種類を確認する必要があります。FX以外の場合は、基準通貨から口座通貨へのティック値を計算する必要があるからです(FXの場合は、ティック値は口座通貨で直ちに報告されます)。 これはReport.mqhからコピーしました。また、このようになります。 // 利益トレードと負けトレードで異なる値は考慮されない。 static double GetTickValue() { static double TickValue[]; const int Pos = REPORT::GetSymbolPos(OrderSymbol()); const int Size = ::ArraySize(TickValue); if (Pos >= Size) TickValue[::ArrayResize(TickValue, Pos + 1) - 1] = 0; // https://www.mql5.com/ru/forum/170952/page142#comment_13691776 // const double TmpPips = NormalizeDouble(OrderClosePrice() - OrderOpenPrice(), 8); // https://www.mql5.com/ru/forum/170952/page128#comment_10696343 const double TmpPips = OrderClosePrice() - OrderOpenPrice(); const double Lots = OrderLots(); if (TmpPips && Lots/* && OrderProfit()*/) // 利益はゼロでもよい - OrderType() > OP_SELL TickValue[Pos] = ::MathAbs(OrderProfit() / (TmpPips * Lots)); return(TickValue[Pos]); } const double TickValue = (OrderType() <= OP_SELL) ? REPORT::GetTickValue() : 0; Reportは、Market Watchに長い間表示されていないシンボルの取引履歴に対して機能します。そして、それがFXなのかそれ以外のものなのか見当もつきません。しかし、取引高を計算するには、履歴の情報で十分なことが多い。 ZY 始値と終値が一致しない場合、計算がこの式に従うことは情報源から導かれる。 (OrderOpenPrice() + OrderClosePrice()) * MathAbs(OrderProfit() / ((OrderClosePrice() - OrderOpenPrice())) Aleksei Kuznetsov 2025.12.30 15:24 #156 fxsaber #:そういうことですか?取引高 - あなたがどれだけのお金を挽回したか。通常のブローカーではそこから手数料が計算されます。例えば個別条件が必要な場合、まず取引高を聞かれます。 Reportで行われていることを再現し、最初の記事に書いた。 Mt4Orders を使わない計算バリアントの問題。 関数https://www.mql5.com/ru/forum/98421/page2#comment_2908365 はかなり異なる結果を与える。 この関数の結果の一つ:-149,96.符号 - fabs() を削除できます。 また、Report 経由の同じ計算の場合:13,839,230.40。 MT4OrdersにマッチするMT5用の同等のものがあるかもしれません。 そうでない場合、最も簡単な解決策は、MT5 関数で行われた取引が MT4Orders 経由で履歴を表示できるかどうかを確認することです。これを使用するには OrderLots() * TickValue * (OrderOpenPrice() + OrderClosePrice()) Попробуйте взвешивать по объему количество пунктов каждой сделки. 2016.10.20www.mql5.com мистер o O очень хорошо знает что такое DEAL Потому что Ку. Количество пунктов - средневзвешенное по объему количество пунктов каждой из сделок. может о О вполне и подойдет предложенный Вами вариант fxsaber 2025.12.30 15:28 #157 Aleksei Kuznetsov #:そうでない場合、最も簡単な解決策は、MT5 の機能を使って行われた取引が MT4Orders を使って履歴で確認できるかどうかです。 それこそがReport.mqhの機能です!あるいは、今日の質問はまったく理解できません。 Aleksei Kuznetsov 2025.12.30 15:36 #158 fxsaber #: つまり、Report.mqhがどのように機能するかということだ!それとも、私が今日の質問を完全に誤解しているのか。 試してみます。 Aleksei Kuznetsov 2025.12.31 06:37 #159 fxsaber #: Turn_Over += (OrderOpenPrice() + OrderClosePrice()) * MathAbs(OrderProfit() / ((OrderClosePrice() - OrderOpenPrice())); これは次のように代入することで簡略化できる: OrderProfit()=(OrderClosePrice()-OrderOpenPrice())* 注文ロット() * ロットサイズ 代入 Turn_Over += (OrderOpenPrice() + OrderClosePrice()) * MathAbs((OrderClosePrice()-OrderOpenPrice()) * OrderLots() * lotSize / ((OrderClosePrice() - OrderOpenPrice())); 削除(OrderClosePrice()-OrderOpenPrice())) Turn_Over += (OrderOpenPrice() + OrderClosePrice()) * OrderLots() * lotSize; 1 ロット/約定のサイズを求めよう: lotSize = (int)SymbolInfoDouble(OrderSymbol(),SYMBOL_TRADE_CONTRACT_SIZE); // マットモードでは利用できないが、MT5では利用できる。 OrderProfit()=(OrderClosePrice()-OrderOpenPrice()))から、マットモードでバーチャルのロットサイズを 取得。* OrderLots() *lotSize if(OrderProfit()!=0){lotSize=OrderProfit()/((OrderClosePrice()-OrderOpenPrice())*OrderLots());} else{lotSize=lotSize;}// 同じ文字によるレアケースを見つけるか無視するか バーチャルの合計 double CalcMt4TurnOver(){ double lotSize=100000, Turn_Over=0; for (int i = 0; i < OrdersHistoryTotal(); i++){ if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ){ if(OrderType()<2){ if(OrderProfit()!=0){lotSize=OrderProfit()/((OrderClosePrice()-OrderOpenPrice())*OrderLots());}// //else{lotSize=lotSize;}//同じシンボルによるレアケースを見つけるか、無視する //lotSize=_TickValue/_TickSize;// - 代替 - Virtualから取得する必要があります。 Turn_Over += (OrderOpenPrice() + OrderClosePrice())*OrderLots()*lotSize; }}} return Turn_Over; } MT5の場合: (これは私が最初に取得したかったもので、その 例よりもはるかに簡単であることが判明しました)。 double CalcMt5TurnOver(){ double lotSize, Turn_Over=0; for (int i = 0; i < ::HistoryDealsTotal(); i++){ const ulong ticket = ::HistoryDealGetTicket(i); if (((HistoryDealGetInteger(ticket,DEAL_TYPE) < 2))){ lotSize = (int)SymbolInfoDouble(HistoryDealGetString(ticket,DEAL_SYMBOL),SYMBOL_TRADE_CONTRACT_SIZE); Turn_Over += HistoryDealGetDouble(ticket,DEAL_PRICE) * HistoryDealGetDouble(ticket,DEAL_VOLUME) * lotSize; } } return Turn_Over; } 結果はまったく同じです。 しかし、lotSize=SYMBOL_TRADE_TICK_VALUE/SYMBOL_TRADE_TICK_SIZE; の代わりにSYMBOL_TRADE_CONTRACT_SIZEを 使うべきかどうかはわかりません。単純な1文字の例では、実際にはそうです。 fxsaber 2025.12.31 07:18 #160 Aleksei Kuznetsov #:バーチャル合計 つまり、最初に書いた とおりになりました。 lotSize=SYMBOL_TRADE_TICK_VALUE/SYMBOL_TRADE_TICK_SIZEではなく、SYMBOL_TRADE_CONTRACT_SIZEを 使うべきでしょうか; それとも、理論的には同じ結果になるのでしょうか?シンボルが1つの単純な例では、実際にはそうです。 シンボルはMarket Watchに掲載されていないかもしれません。 1...91011121314151617 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
簡単なことだが、なぜなのか?
Report.mqhの最後にそのような項目がある。
カラムを移動/削除するには、それに応じてソース内のこのシーケンスだけを変更する必要がある。
レポートに TurnOver の計算がありますね。
私は同じことをしようとしていますが、MT4Ordesを使用していません。
例として、私はあなたの投稿を見つけましたhttps://www.mql5.com/ru/forum/98421/page2#comment_2908365
結果の一つ:-149,96。符号 - fabs() を削除できます
そして、Report 経由の同じ計算: 13,839,230.40。
この例では、計算は 1 つのシンボルに対してのみ行われます CalcHistorySlip( const string Symb) さて、これは各シンボルに対して関数を呼び出すことで解決できます。
MT4OrdersにマッチするMT5用の同等の関数があるかもしれません。そうでなければ、そのままにしておくか、大きなレポートにはまったく含めないつもりです。それがどのように役立つのか明確でないためです。現在、出来高の合計を出力しています。単一シンボルの Expert Advisor の場合、MT4Orders から Volume と TurnOver の合計でソートした結果は同じです。つまり、TurnOver の代わりになるものがあります。しかし、マルチシンボルの場合は異なります。なぜなら、たくさんの異なるシンボルの合計は、金額的には等価ではないからです。TurnOverの方が良いだろう。
そして、MT5用のバリアント(上記リンクのコード)とボリュームによるソートの比較は全く一致しません。
MT4OrdersにマッチするMT5用の同等のものがあるのでは?
そういうことですか?
そうでなければ、そのままにしておくか、大きなレポートにはまったく含めないことにします。それがどのように役立つのか明確でないためです。
取引高 - あなたがいくら稼いだか。通常のブローカーはそこから手数料を計算する。
例えば個別条件が必要な場合、まず取引高を聞かれます。
そういうことですか?
取引高 - あなたがどれだけのお金を挽回したか。通常のブローカーではそこから手数料が計算されます。
例えば個別条件が必要な場合、まず取引高を聞かれます。
そうあるべきだと思います:
OrderLots() * TickValue * fabs(OrderOpenPrice() - OrderClosePrice())さらに、シンボルの種類を確認する必要があります。FX以外のブローカーでは、基準通貨から口座の通貨へのティックのコストを計算する必要があるからです(FXの場合、ティックのコストは口座の通貨で直ちに報告されます)。
そうあるべきだと思う:
さらに、シンボルの種類を確認する必要があります。FX以外の場合は、基準通貨から口座通貨へのティック値を計算する必要があるからです(FXの場合は、ティック値は口座通貨で直ちに報告されます)。
これはReport.mqhからコピーしました。また、このようになります。
Reportは、Market Watchに長い間表示されていないシンボルの取引履歴に対して機能します。そして、それがFXなのかそれ以外のものなのか見当もつきません。しかし、取引高を計算するには、履歴の情報で十分なことが多い。
ZY 始値と終値が一致しない場合、計算がこの式に従うことは情報源から導かれる。
(OrderOpenPrice() + OrderClosePrice()) * MathAbs(OrderProfit() / ((OrderClosePrice() - OrderOpenPrice()))そういうことですか?
取引高 - あなたがどれだけのお金を挽回したか。通常のブローカーではそこから手数料が計算されます。
例えば個別条件が必要な場合、まず取引高を聞かれます。
Reportで行われていることを再現し、最初の記事に書いた。
Mt4Orders を使わない計算バリアントの問題。
関数https://www.mql5.com/ru/forum/98421/page2#comment_2908365 はかなり異なる結果を与える。
この関数の結果の一つ:-149,96.符号 - fabs() を削除できます。
また、Report 経由の同じ計算の場合:13,839,230.40。
MT4OrdersにマッチするMT5用の同等のものがあるかもしれません。
そうでない場合、最も簡単な解決策は、MT5 関数で行われた取引が MT4Orders 経由で履歴を表示できるかどうかを確認することです。これを使用するには
そうでない場合、最も簡単な解決策は、MT5 の機能を使って行われた取引が MT4Orders を使って履歴で確認できるかどうかです。
つまり、Report.mqhがどのように機能するかということだ!それとも、私が今日の質問を完全に誤解しているのか。
Turn_Over += (OrderOpenPrice() + OrderClosePrice()) * MathAbs(OrderProfit() / ((OrderClosePrice() - OrderOpenPrice()));これは次のように代入することで簡略化できる:
OrderProfit()=(OrderClosePrice()-OrderOpenPrice())* 注文ロット() * ロットサイズ
代入
削除(OrderClosePrice()-OrderOpenPrice()))
1 ロット/約定のサイズを求めよう:
OrderProfit()=(OrderClosePrice()-OrderOpenPrice()))から、マットモードでバーチャルのロットサイズを 取得。* OrderLots() *lotSize
バーチャルの合計
MT5の場合: (これは私が最初に取得したかったもので、その 例よりもはるかに簡単であることが判明しました)。
結果はまったく同じです。
しかし、lotSize=SYMBOL_TRADE_TICK_VALUE/SYMBOL_TRADE_TICK_SIZE;
の代わりにSYMBOL_TRADE_CONTRACT_SIZEを 使うべきかどうかはわかりません。単純な1文字の例では、実際にはそうです。
バーチャル合計
つまり、最初に書いた とおりになりました。
lotSize=SYMBOL_TRADE_TICK_VALUE/SYMBOL_TRADE_TICK_SIZEではなく、SYMBOL_TRADE_CONTRACT_SIZEを 使うべきでしょうか;
それとも、理論的には同じ結果になるのでしょうか?シンボルが1つの単純な例では、実際にはそうです。
シンボルはMarket Watchに掲載されていないかもしれません。