初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 250 1...243244245246247248249250251252253254255256257...260 新しいコメント Aleksei Stepanenko 2021.09.08 20:04 #2491 すぐに確認できるような簡単なものであれば、こんな感じです。 double profit = 0; int cnt=LockTicket, i , ototal = OrdersHistoryTotal(); for(i = ototal-1; i >=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol() == Symbol() && OrderCloseTime() > 0) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderMagicNumber() == Magic ) { profit += OrderProfit()+OrderCommission()+OrderSwap(); if(profit>max) { cnt=OrdersTicket(); break; } } } } } } 通常、注文は時間的に互いに続きますが、これは保証されたものではありません。そのため、年表を確認する必要があります。でも、実験用にはこれで十分です。 Maksim Burov 2021.09.09 06:00 #2492 Aleksei Stepanenko #:すぐに確認できるような簡単なものであれば、こんな感じです。通常、注文は時間的に互いに続きますが、これは保証されたものではありません。そのため、年表を確認する必要があります。でも、これなら実験に使えます。 そうですね、タイミングが保証されていない。 だからこそ、チケットでクローズドオーダーを全部調べたいんです。オーダーチケットを知っていて、そこから数えようとしているのですが、何かが間違っているようです)正しい方法は何でしょうか? Valeriy Yastremskiy 2021.09.09 08:25 #2493 Aleksei Stepanenko #:すぐに確認できるような簡単なものであれば、こんな感じです。通常、注文は時間的に互いに続きますが、これは保証されたものではありません。そのため、年表を確認する必要があります。でも、これなら実験に使えます。 履歴に目を通すと、成行注文は大きいものから順に考えるので、再計算の瞬間に閉じるであろう注文は、小さいものから大きいものへと目を通した方が、同じティックで開いたもの、閉じたものを正しく考慮できるのではないでしょうか。だと思う) Aleksei Stepanenko(アレクセイ ステパネンコ) #: すぐに確認できる簡単なものであれば、このようなものです。経験則上、オーダーは時間的に互いに追随しますが、これを保証するものではありません。したがって、良い意味で、年表を確認する必要があります。でも、実験には使えるでしょう。 Alexeyのコードも正しく表示されないのでしょうか? Maksim Burov 2021.09.09 18:49 #2494 Valeriy Yastremskiy #:履歴では、再計算時にクローズする注文を考慮し、成行注文は同じティックでオープンとクローズを正しく考慮するため、少ないものから多いものへとカウントするのがよいでしょう。だと思う)Alexeyのコードも計算がおかしいのでしょうか? 試していません。これから試してみます。お知らせします。 Maksim Burov 2021.09.09 18:59 #2495 Aleksei Stepanenko #:すぐに確認できるような簡単なものであれば、こんな感じです。通常、注文は時間的に互いに続きますが、これは保証されたものではありません。そのため、年表を確認する必要があります。でも、実験には使えるでしょう。 確認したところ、コンパイル時に多くのエラーが発生したため、.NETを除き、すべて修正しました。 if(profit>max) このセリフ、よくわからないんです。説明できますか? Aleksei Stepanenko 2021.09.09 19:56 #2496 makssub #: 一定の利益が出た後にチケットを変更するというものです 最大値は、チケットが変更された後の利益の限界値です。値は自分で設定します。 Valeriy Yastremskiy 2021.09.09 20:18 #2497 Aleksei Stepanenko #:最大値は、チケットが変更された後の利益の限界値です。その値は、あなたが設定します。 私の理解が正しければ、問題は別にあるのです。1次、2次、3次があります。建値がどのように形成されているのかわからない。注文3が終了すると、合計の利益は注文3の利益と同じになる。つまり、注文3より前にオープンした注文のチケットを計算する必要があるのです。そうすると、オーダー2はクローズドになります。注文2の前に開かれた注文のチケットを見つける必要があります。合計の利益は、注文2と3の利益と同じになります。 理由は分かりませんが、理屈はそうなっているようです)。 Aleksei Stepanenko 2021.09.09 20:27 #2498 ヴァレリー この2つの文章の論理がよくわからないのですが。 Valeriy Yastremskiy 2021.09.09 20:40 #2499 Aleksei Stepanenko #: ヴァレリー あの2つの文章は、ロジックがよくわからなかったんです。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム 初心者からのFAQ MQL4 MT4 MetaTrader 4 マックサブ さん 2021.09.01 16:38 int FindTicket() { int oldticket; int tick=0; ticket=0; for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { oldticket = OrderTicket(); if (oldticket > ticket) { ticket = oldticket; tick = OrderTicket(); } } } } return(tick); } int TickF = FindTicket(); int CalculateProfitHistory() { double _point; int i, _ototal = OrdersHistoryTotal(), _profit=0; for (i = 0; i < OrdersHistoryTotal(); i++) { if (OrderSelect(TickF, SELECT_BY_TICKET, MODE_HISTORY)) { if (OrderSymbol() == Symbol()) { if (OrderMagicNumber() == Magic) { _point = MarketInfo(OrderSymbol(), MODE_POINT); if (_point == 0) { if (StringFind(OrderSymbol(), "") < 0) _point = 0.0001; else _point = 0.01; } if (OrderType() == OP_BUY) { _profit += int((MarketInfo(OrderSymbol(), MODE_BID) - OrderOpenPrice())/_point); } if (OrderType()==OP_SELL) { _profit += int((OrderOpenPrice() - MarketInfo(OrderSymbol(), MODE_ASK))/_point); } } } } } return(_profit); } 最初の関数で必要なオーダーチケットを見つけ、2番目の関数でそのチケットに続くすべてのクローズドオーダーの利益を計算する必要があります。それ以前のものの利益には興味がない。しかし、2つ目は正しく計算されない。注文が開始されると、これら2つの関数が呼び出されるため、0になるはずですが、そうではありません。 PS あなたのアドバイスで、配列をあきらめました) 上の12番目のボックス) Maksim Burov 2021.09.11 10:04 #2500 皆さんのヒントをもとに、すべてを考え、自分なりに工夫しました) 負けた注文を他の注文でカバーし、利益を得るという仕事である。 実施しました。負けた後に開いた注文のチケットを 記憶しておき、それを報告地点とした。この時点から、損切りした注文の利益と、それ以降の決済した注文の利益の計算を開始します。最初の注文はオープンで、利益になった時点でクローズすることを忘れないようにしましょう。 if ( (CalculateProfitHistory() + FirstProfit() >= プロフィット) { CloseFirst()。 プリント(「最初の負け注文を閉じる」)。 } double CalculateProfitHistory() { double profit = 0; int cnt=Ticket, i , ototal = OrdersHistoryTotal(); for(i = ototal-1; i >=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol() == Symbol() && OrderCloseTime() > 0) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderMagicNumber() == Magic ) { if (Ticket !=0) { if (OrderTicket() >= Ticket) { profit += OrderProfit()+OrderCommission()+OrderSwap(); } } } } } } } return(profit); } 1...243244245246247248249250251252253254255256257...260 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
すぐに確認できるような簡単なものであれば、こんな感じです。
通常、注文は時間的に互いに続きますが、これは保証されたものではありません。そのため、年表を確認する必要があります。でも、実験用にはこれで十分です。
すぐに確認できるような簡単なものであれば、こんな感じです。
通常、注文は時間的に互いに続きますが、これは保証されたものではありません。そのため、年表を確認する必要があります。でも、これなら実験に使えます。
そうですね、タイミングが保証されていない。 だからこそ、チケットでクローズドオーダーを全部調べたいんです。オーダーチケットを知っていて、そこから数えようとしているのですが、何かが間違っているようです)正しい方法は何でしょうか?
すぐに確認できるような簡単なものであれば、こんな感じです。
通常、注文は時間的に互いに続きますが、これは保証されたものではありません。そのため、年表を確認する必要があります。でも、これなら実験に使えます。
履歴に目を通すと、成行注文は大きいものから順に考えるので、再計算の瞬間に閉じるであろう注文は、小さいものから大きいものへと目を通した方が、同じティックで開いたもの、閉じたものを正しく考慮できるのではないでしょうか。だと思う)
すぐに確認できる簡単なものであれば、このようなものです。
経験則上、オーダーは時間的に互いに追随しますが、これを保証するものではありません。したがって、良い意味で、年表を確認する必要があります。でも、実験には使えるでしょう。
Alexeyのコードも正しく表示されないのでしょうか?
履歴では、再計算時にクローズする注文を考慮し、成行注文は同じティックでオープンとクローズを正しく考慮するため、少ないものから多いものへとカウントするのがよいでしょう。だと思う)
Alexeyのコードも計算がおかしいのでしょうか?
試していません。これから試してみます。お知らせします。
すぐに確認できるような簡単なものであれば、こんな感じです。
通常、注文は時間的に互いに続きますが、これは保証されたものではありません。そのため、年表を確認する必要があります。でも、実験には使えるでしょう。
確認したところ、コンパイル時に多くのエラーが発生したため、.NETを除き、すべて修正しました。
if(profit>max)
このセリフ、よくわからないんです。説明できますか?
一定の利益が出た後にチケットを変更するというものです
最大値は、チケットが変更された後の利益の限界値です。値は自分で設定します。
最大値は、チケットが変更された後の利益の限界値です。その値は、あなたが設定します。
私の理解が正しければ、問題は別にあるのです。1次、2次、3次があります。建値がどのように形成されているのかわからない。注文3が終了すると、合計の利益は注文3の利益と同じになる。つまり、注文3より前にオープンした注文のチケットを計算する必要があるのです。そうすると、オーダー2はクローズドになります。注文2の前に開かれた注文のチケットを見つける必要があります。合計の利益は、注文2と3の利益と同じになります。
理由は分かりませんが、理屈はそうなっているようです)。
ヴァレリー あの2つの文章は、ロジックがよくわからなかったんです。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
初心者からのFAQ MQL4 MT4 MetaTrader 4
マックサブ さん 2021.09.01 16:38
最初の関数で必要なオーダーチケットを見つけ、2番目の関数でそのチケットに続くすべてのクローズドオーダーの利益を計算する必要があります。それ以前のものの利益には興味がない。しかし、2つ目は正しく計算されない。注文が開始されると、これら2つの関数が呼び出されるため、0になるはずですが、そうではありません。
PS あなたのアドバイスで、配列をあきらめました)
上の12番目のボックス)
皆さんのヒントをもとに、すべてを考え、自分なりに工夫しました)
負けた注文を他の注文でカバーし、利益を得るという仕事である。
実施しました。負けた後に開いた注文のチケットを 記憶しておき、それを報告地点とした。この時点から、損切りした注文の利益と、それ以降の決済した注文の利益の計算を開始します。最初の注文はオープンで、利益になった時点でクローズすることを忘れないようにしましょう。
if ( (CalculateProfitHistory() + FirstProfit() >= プロフィット)
{
CloseFirst()。
プリント(「最初の負け注文を閉じる」)。
}