[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 669

 
Diger:

このようなことがあった方はいらっしゃいますか?

ストラテジーテスターのログにLOSSはなく、グラフの曲線は順調に下降しています。

それはどういうことでしょうか?

重力の力は...:))木星にいないの?:))ごめんね~、冗談だよ・・・。
 
Diger: このようなことがあった方はいらっしゃいますか?ストラテジーテスターのログにLOSSはなく、グラフの曲線は順調に下降しています。それはどういうことでしょうか?
スプレッドが低下している。トレードが多すぎる。テスターのチャートを 開きます。
 
artmedia70:
重力の力...:))木星にいないの?:))ごめんね~、冗談だよ・・・。

私自身、ちょっと変人なんです。多分、本当にそうなんだろうな.
 
Richie:
スプレッドで水気を切る。トレードが多すぎる。テスターのチャートを開きます。


あなたの言うとおりでした!

通常2Pのところ、26Pになりました...。

ありがとうございました。

 
Diger:


結果的に正解でしたね!

通常2Pのところ、26Pになりました...。

ありがとうございました。

最大スプレッドの条件を追加し、それ以上では取引を開始しない(ただし、すでに開始した取引はEAによって引き続き制御される)。

 
chief2000:

最大スプレッドの条件を追加し、それ以上では取引を開始しない(ただし、すでに開始されている取引はEAによって引き続き制御される)。


以前は必要ないと思っていました。

しかし、今日のテスターでこの必要性がわかりました。

 

ちなみに、私にとっても興味深く、不明な点が多い。私のExpert Advisorには、最大の損失を見つけ、その損失のロットに、すべてのTFでの相場の現状と、建玉と現在の価格との 相対位置、および価格チャートそのものから算出した係数をかけた反対ポジションを建てる、という原則で追加しました(価格が正しい方向に動いた場合、本当にロットを開く価値があるか、とか......)。それぞれ、2つのポジションの合計利益が50~60ポイント程度になった時点で、まず利益の出ている方のポジションを両方決済します。

そこで、テスターで2年間安定した利益を出している収益性の高いトレーディングシステムが、ループを使うと2ヶ月で破綻してしまうという、受け入れがたい荒々しいドローダウンを武器に持っていることに気づいたのです......。その理由は何でしょうか?ざっくりとした推測ですが。ドレナージュの統計データを保存しなかったのは、"なぜ?"という理由からです。

 

質問です。

EAに実装されているほぼ全てのストラテジーで、ティック毎に何度も同じコード列を参照し、相場の現状をデータとして取得する必要があるのです。

   CurAsk   =MarketInfo(Symbol(),MODE_ASK);
   CurBid   =MarketInfo(Symbol(),MODE_BID);
   OpnPrice =iOpen(NULL,PERIOD_M5,0);
   OpnPrice1=iOpen(NULL,PERIOD_M5,1);
   ClsPrice1=iClose(NULL,PERIOD_M5,1);
スタート関数の最初に一度だけアドレス指定し、その後はデータを格納するグローバル 変数のみにアドレス指定すればいいのでしょうか?ちょっとめんどくさいけど...。
 
artmedia70:

質問です。

EAに実装されているほぼ全てのストラテジーで、現在のマーケット状態のデータを得るために、同じコードのシーケンスを何度も、毎ティック参照しなければなりません。

スタート関数の最初に一度だけアドレス指定し、その後はこのデータを格納するグローバル変数のみをアドレス指定すればいいのでしょうか?ちょっと油断してしまいましたが...


OpnPrice =iOpen(NULL,PERIOD_M5,0);

計算はゼロバーで行われ、つまり、ティックごとにデータが変わるということは理解しているのですが

もしお望みなら、スクリプトを書いてループさせれば、この計算をグローバル変数 に入力してくれますが、この場合、ティックごとに新しいデータを同期させる必要があります。 このままにしておいて、別の関数にして、必要な場合だけこの関数を呼び出す、つまり、この計算が注文開始にとって重要なら、注文開始直前、それぞれ決済直前に呼び出すのがいいと思うのですが...。

 
IgorM:


OpnPrice =iOpen(NULL,PERIOD_M5,0);

ここで私は、計算はゼロバーで行われ、すなわち、すべてのティックがデータを変更することを理解します。

論理的には、スクリプトを書いてループさせれば、この計算をグローバル変数に与えてくれますが、この場合、ティックごとに新しいデータを同期させる必要があります。 このままにしておいて、別の関数に渡し、必要なときだけこの関数を呼び出す、つまり、この計算が注文開始にとって重要なら、開始前に、それぞれ決済前に行うのが良いと思います。

イゴール 今のところそうしていますが、これらのストラテジーが混在し、条件によってつながっている、ただでさえ遅いシステムが遅くなり、時にはそれらが同時に動作してしまうこともありますね。それぞれが別の関数で同じコードを呼び出すと想像してください。

私はすでにゼロバーで開いているので、いくつかのデータがゼロバーから取得されている場合はどうなるのでしょうか?1本目、2本目、3本目のバーのデータしか取得できないのですが...。
OpnPrice =iOpen(NULL,PERIOD_M5,0); 現在のバーのオープン 価格を取得しますが、変更されません - これは 既成事実化 です。前回の終値と 今回の始値を比較すると、ポジションを残すか拒否する機能があるのですが...。

そこで、このデータをティックの到着とともに一旦 すべて読み込んで、Expert Advisorで利用するようにします。エキスパートアドバイザーが次の計算サイクルのためにそれらを更新する次のティックまで、それらは変更されず、実際のものです。

現在のすべての計算が終了する前に 新しいティックが来る確率はどのくらいでしょうか?この場合のみ、データが古くなり、無関係になるような気がします。