閉じる問題、助けてください - ページ 3

 

皆さん、こんにちは
皆さんの協力で、症状が変わりました。
ステートメント ...if(OrderSelect(index, SELECT_BY_TICKET)) は SELECT_BY_POS. に変更されました。コードは正しいとは程遠いです。このプログラムは、1ピップ後にすぐに売り、そして閉じます。その結果、SLもTPもないことがわかります。そこで、正気度を確認 するために、OrderSendにSLとTP(500)を一枚ずつ挿入してみました。変化なし。全ての約定が1、2pip以内に収まっています。これは面白くなってきました。理由はまだわからないけど!?4時間足1本で1000回以上の約定が発生しています。
これから研究してみますが、何か参考になることがあればお願いします。

 

Aisさん、こんにちは。
今投稿したら、先に投稿されていましたね。何をしてるんですか?

 

再びこんにちは
私はより良いロジックの理解のためにプログラムを少しスタイル変更しようとしています
私はプログラムがあなたを喜ばせる
ためにしたいと思います。

 
Ais wrote>>

再びこんにちは
私は、ロジックの理解を深めるためにプログラムを少し作り変えようとしています
私は、プログラムが
以下のようになることを望んでいます。

Aisさん、こんにちは。
あなたはとても親切です。ありがとうございます。あなたの時間は貴重です。再スタイリングは、きっと喜んでいただけると思います。
前回の投稿から、問題の一部を解決しました。プログラムは閉じますが、私が望むようにはいきません。
閉じる問題の鍵は、私がATRを適切に初期化しなかったという事実です。
売りポジションをクローズする前と後をお見せします。

次に......if (OrderClosePrice() >= OrderOpenPrice() + (ATR*2))
今度は...if (OrderClosePrice() >= OrderOpenPrice() + (40*Point))...this will close the Sell position

これは、私が意図したプログラムの動作方法ではありませんでした。しかし、テストのために新しいコードを挿入してみました。
これは、問題がATRの中にあることを証明するのに役立ちます。ATRを正しく初期化していなかったのでしょう。
さらにテストするために、ATRという新しい変数を構築しようとする代わりに、iATRを挿入してみました。
私がどのようにコーディングしようとしたかをお見せします。

if (OrderClosePrice() >= OrderOpenPrice() + ((iATR(NULL,0,20,1)*2)*Point))

これもうまくいきませんでした。
今回もありがとうございました。
ご返事お待ちしております。
 

Aisさん、こんにちは
ご提案ありがとうございます。365(annual)とmy_methodを使い分けるというのは、よくわかりました。短いタイムフレームでのテスト目的
はあくまで便宜的なものであるべきですね。
まだまだ勉強することがたくさんあります。ATRの入れ方はやっとわかったのですが、掛け算ができません。以下はその例です。

現時点ではこのような感じです。// =ハード・ストップ
これは動作しますが、私が望むものではありません。
私は、if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1) )*2 ) の方向で動いています。
これではうまくいきません。私が考えていることが、あなたや他の人に伝われば幸いです。iATRは2倍されます。
これに対して何か提案はありますか?これが解決されると、私は同様にエントリーポジションのATRを半分にすることができました。

もう一つ試した方法があったのですが、うまくいきませんでした...if(OrderClose - OrderOpenPrice - (iATR(NULL,0,20,1)*2)) <= 0)です。

また、お忙しい中、ありがとうございました。あなたの知恵袋をノックしている人はたくさんいるはずです。
乾杯
 

ハックルベリーさん、こんにちは!
オープニング機能だけやっておきました。
そして今、利益確定のロジックを理解しようとしています。
OrderSend()でストップとテイクが抜けていますが、それはいいとして、損切りするコマンドは損切りした場合のみ実行します。
そして新しいプログラムスタイルのわかりやすさについて意見を
伺いたいのですがhttps://www.mql5.com/en/forum/124521/page2
とりあえず、さよなら!
:)

 

Aisさんこんにちは
ご回答ありがとうございました。
StopLossやTakeProfitがない理由を説明させていただきます。
OrderSendにSLとTPを挿入しないことで、SLは別の場所にあり、式の下にあります...

if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1))).

これは確かに動作しますが、正確には適切なSLではありません。

if (OrderClose >= OrderOpenPrice + (iATR(NULL,0,20,1))*2)...

上の式のiATR...のシフトは、1バーごとに変わる可能性があります。SLとTPでOrderSendを使用することで、シフトの変化を利用することができません。

各機能は 現時点では動作しており、ただ、機能の調整方法を学ぶ必要があります。
ご指摘とご質問ありがとうございました。
Cheers

 


でも、利益が出たときに注文を閉じる条件は必要です。
リニューアルした関数「iSignalClose」
https://www.mql5.com/en/forum/124521/page2 をご覧ください
今はもちろん仮想SLの条件です。
でも、仮想TPの条件は必要です。
ご返信お待ちしております。
:)

 





将来的には、これらのパラメータを最適化することが容易になると思われます。

////////////////////////////////////////////////////////////////////<         3>
// < 1.1. Data : Input >                                          //<          >
//                                                                //<          >
// < 1.1. Input             7 =       4 i       3 d       - s   > //<          >
// <      1. Strategy       4 =       2 i       2 d       - s  /> //<          >
// <      2. Trading        3 =       2 i       1 d       - s  /> //<          >
// </1.1. Input             7 =       4 i       3 d       - s   > //<          >
//                                                                //<          >
// <      1. Strategy 4 >=========================================//<          >
                    int       iBasePeriod       = 20            ; //<          >
                    int       iBaseBar          = 1             ; //<          >
extern              double    dFactorTP         = 2.0           ; //<          >
extern              double    dFactorSL         = 2.0           ; //<          >
// </     1. Strategy 4 >=========================================//<          >
//                                                                //<          >
// <      2. Trading 3 >==========================================//<          >
                    int       iSlippage         = 1             ; //<          >
                    int       iMagic            = 0             ; //<          >
                    double    dLots             = 0.1           ; //<          >
// </     2. Trading 3 >==========================================//<          >
//                                                                //<          >
//                                                                //<          >
//                                                                //<          >
// </1.1. Data : Input >                                          //<          >
     

例:最適化後、元のパラメータを最適化されたパラメータに変更し、extern宣言を削除する。

Aシステム "の最適化サンプル。チャンピオンシップ2008 Final Edit」(通称「ACB6」)https://www.mql5.com/en/forum/112633/page7#276861。
ファイル:
1e.txt  46 kb
1r.txt  49 kb