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

 
Craft:


Anatolyさん、どうもありがとうございます。Skypeのお辞儀のように、ここにアイコンを挿入できないのが残念です。すべてがシンプルでエレガント。他のテクニカル分析プログラムとのコミュニケーションから、そうあるべきだと理解しているのですが、mqlとの連携はまだまだ修行が足りません。メソッドでのマーキングのヒントありがとうございます!何とかします。

最後のヒントとして、このEAで1つのバーに複数の注文を出さないようにするにはどうしたらよいでしょうか?すでに善良な人たちからヒントをもらっているが、役に立たなかった。

あなたの問題を解決しようとしたら、このようになりました。しかし、まずはその前に。

誰が有罪で、どうすればいいのか?あるいは、脚はどこから来るのか...

Expert Advisorでは、CCIインジケータの 異なる設定が、ポジションを開くとき(そしてそれぞれ前のポジションを閉じるとき)に使用されます。買うときの設定と売るときの設定が違うんですね。私が理解した限りでは、これがトリックです。例えば、上昇トレンドでは、あまり感度の高くない設定で買いを入れて、利益を「成長」させる方が得策です(つまり、ポジションを保有することに意味があるのです)。(つまり、トレンドのポジションを長く持つことに意味がある)。一方、売り(上昇トレンド)の場合は、例えば調整局面をとらえようとする場合(したがって、カウンタートレンドのポジションでより短い時間市場にとどまる)、迅速なエントリー/エグジットができるように、より繊細な設定が必要です。すべてが非常に論理的で、考え方も理にかなっているのですが、このシステムには1つ微妙な点があります。それは、設定の違いによって2つの正反対のシグナルが同時に発生した場合(実際には、ターミナルにとっては2つのインディケータです)、どうしたらいいのかということです。

青い矢印について...

Expert Advisorは1つのバーで買いと売りのシグナルを同時に取得し、上に書いたように、1つのポジションを開くと反対側のポジションは閉じる必要があります。この場合、買いシグナルを出し、売りシグナルを閉じます。その時までに売りがなければ、アドバイザーは買い(BUY)を開始します。次のティックでは、反対の売りのシグナルが発生するため、開いたばかりの買いは決済されます。もう一つ、買い(青い矢印が多い)だけが「ふらふら」することにお気づきでしょうか?買い/売りメソッドの実装は、私が理解した限りではチュートリアルの通りですが、操作完了後にoperator returnでstart()メソッドから抜ける、つまり1ティックに1回しか開け/閉めができない、という特徴があります。だから、私は "ダブルシグナル "を取得すると、すべての取引が閉じている(ブロック閉鎖 が最初に記述されている)、次にブロックオープン取引、その中に買いが最初に記述されている!!そして買いの後、開始()から終了、そのアドバイザーはちょうど販売に到達する時間がないように :)) と "通常の" 単一の注文が得られるまでループしています。

ソリューションメソッドについて...

この問題を解決するには、いくつかの方法があります。
1.昔ながらのやつ。
そもそも、その考えを「殺して」、購入と販売に同じパラメーターを設定するだけで、問題はひとりでに解決します。

2.複雑である。
メイントレンドの判断アルゴリズムをExpert Advisorに書き込み、それに応じてトレードの「重み」を変える必要があります。そのため、反対のシグナルが来た場合は、「重み」が大きい方(つまり、トレンドが出ている方)を優先する必要があるのです。

3.無題。
多方向信号受信時...
何もしない。

if(Opn_B && Opn_S)return;

これはまさに、下に添付したファイルのオプションです。
分かりやすく説明できたでしょうか?
がんばってください :)))

ファイル:
11_3_1.mq4  13 kb
 

Volframの 投稿は複数のスレッドに増殖したため、削除されました。

ヴォルフラム、このために特別に自分のスレッドを作ってくれたんですね。すでに答えが出ている。それでは不十分なのでしょうか?

追伸:秘密を教えてあげよう、ヴォルフラム。あなたのアイデアに明らかな関心がないことは、それが注目に値しないことを暗に示しているのだ。従って、「有償で」実施しようという人はいなかった。

 
ToLik_SRGV:

2.複雑である。
メイントレンドを決定するアルゴリズムをExpert Advisorに統合し、それゆえ、トレードに異なる「重み」を与えるべきである。そのため、反対のシグナルが来た場合は、「重み」が大きい方(つまり、トレンドが出ている方)を優先する必要があるのです。

3.無題。
異なる指示の信号を受信すると ...
何もしないこと。

これはまさに、以下の添付ファイルのオプションです。
分かりやすく説明できたでしょうか?
がんばってください :)))

私もマイルストーンを追加してもよろしいでしょうか...。:)

私も教科書からスタートしました。もっと単純に、売りシグナルでの買い終値と買いシグナルでの売り終値を削除すればよいのです。つまり、Sergey Kovalevのチュートリアルで実装されていたスイングトレードを使用しないのです...ポジションのトラッキングは、チケットではなく、マジシャンが行うべきです。最初はそうして、静かに自分のアイデアを試していました。それから、仕事で使う関数を自分で書いたことも...。

ZS.コードを見ていないので、このEAについては間違っているかもしれませんが......。

 

関数の極値の求め方がわからない

値を格納するデータ配列があります。

250個の要素からなるデータ配列を用いて割れ目-極値を求め、その極値がある要素の番号のみを格納する方法

 

みんな、こんな質問があるんだ。

トレンド検出機能では、1本目のACが2本目のACよりも大きい(つまり上昇している場合でも、 トレンドが下降している (他の指数が下降を示す)場合は、この場合は0を返す、つまり下降トレンドがない...と明示されています。しかし、EAは頑なにそれを無視する。その理由は何だろうか?


トレンドリバーサルの機能。

int Trend_BBOsMA (string sy, int tf)
{
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB    =iCustom(sy,tf,"BB_MA",13,13,0,1),
   OsMA  =iOsMA  (sy,tf,9,21,5,PRICE_CLOSE,1),
   AC1   =iAC(sy,tf,1),
   AC2   =iAC(sy,tf,2),
   AC3   =iAC(sy,tf,3);
   
   if (BB>0 && OsMA>0 && AC1>AC2) return(1);
   if (BB<0 && OsMA<0 && AC1<AC2) return(-1);
   else return(0);
}

株を開くためのチェック(初めに、トレンドチェック、それに反応しない:trH1と trM15 ) - 条件でさらに実験、気にしない、しかし、コードは動作します...。

//============================================================================================== 
   // Доливка 1
//==============================================================================================  
//------------------------- Покупка 1 ------------------------   
   if (AddPose1 &&
         trH1==1 &&                  // Если часовой и 
         trM15==1 &&                 // пятнадцатиминутный тренды восходящие
         Mom5_1>Mom5_2 &&              // найден разворот
         Mom5_2<=Mom5_3 &&             // Моментума
//         Mom5_2<=100.0 &&
//         DeM5_1<=0.6 &&                  // и Демаркер в зоне перепроданности
//         AC1>AC2 &&                    // Ускорение вверх ----------------------- ВОТ ЗДЕСЬ УБРАЛ
         SecondsAfterOpenLastPos(NULL, OP_BUY, 511)>=4*60
      )
         {
            Magic=511;          // Задаём магик... 
            Lots=GetSizeLot();
            divider=1;
//            if (trH1==10 || trM15==10) divider=2;
            Lots_New=NormalizeLot(Lots/divider, true, NULL);
            New_Comm="Buy_M5_Стратегия_1_Доливка1";   // Задаём комментарий для позиции
            OpenPosition(NULL, OP_BUY, Lots_New, 0, 0, Magic, New_Comm);
         }
//------------------------- Продажа 1 ------------------------   
   if (AddPose1 && 
         trH1==-1 &&                 // Если часовой и 
         trM15==-1 &&                // пятнадцатиминутный тренды нисходящие
         Mom5_1<Mom5_2 &&              // найден разворот
         Mom5_2>=Mom5_3 &&             // Моментума
//         Mom5_2>=100.0 &&
//         DeM5_1>=0.4 &&                  // и Демаркер в зоне перекупленности
//         AC1<AC2 &&                    // Ускорение вниз ------------------------ ВОТ ЗДЕСЬ УБРАЛ
         SecondsAfterOpenLastPos(NULL, OP_SELL, 511)>=4*60
      )
         {
            Magic=511;          // Задаём магик... 
            Lots=GetSizeLot();
            divider=1;
//            if (trH1==-10 || trM15==-10) divider=2;
            Lots_New=NormalizeLot(Lots/divider, true, NULL);
            New_Comm="Sell_M5_Стратегия_1_Доливка1";   // Задаём комментарий для позиции
            OpenPosition(NULL,OP_SELL,Lots_New,0,0,Magic,New_Comm);
         }
//==============================================================================================

もしかしたら、私が見えないものを誰かが見てくれるかもしれない?ありがとうございます。

 
スクリーンショットにはBB_MAインジケータが表示されていません。また、上位のコードにはトレンド方向のチェックはありません。BB変数には常に1つの値が格納される。私が理解する限り、BB_MAインジケータは移動平均 です。移動平均の方向を決定するためには、異なるローソク足、例えば1本目と2本目のローソク足で2つの値を持ち、これらの値を互いに比較する必要があります。したがって、上位コードはそのタスクを部分的にしか実行していないと言える。
 
IgorM:

関数の極値の求め方がわからない

値を格納するデータ配列があります。

250個の要素からなるデータ配列を用いて割れ目-極値を求め、その極値がある要素の番号のみを格納する方法


配列の値をループするループを作成します。配列の 前のセルの値と、現在のセルの値を比較 するのです。それ以上の場合は、次のループの繰り返しに移行する。簡単に言うと、配列の後続の各セルの値がインクリメントされる限り、ループを継続するのです。値が前の値より小さくなったらすぐに、トレンドが途切れた、つまりピークを見つけたので、前のセルの番号をあらかじめ宣言した配列に格納する。今、トレンドは下降しています。ここで、次のセルが前のセルより高い値を見つけるまで検索を実行する。これが起こると、トレンドの反転が起こったので、前のセルの番号があらかじめ定義された配列に格納されます - 谷の底を発見したのです。異なる配列に数字を並べることで、谷からピークをフィルターにかけることができます。要するに、すべての配列の値を調べた後、ソートされたデータを得る(他の1つ/2つの配列のセル番号を探す)。
 
drknn:

ループを設定し、その中で配列の値をループしています。配列の前のセルの値と現在のセルの値が比較されます。それ以上の場合は、次のループの繰り返しに移行する。簡単に言うと、配列の後続の各セルの値がインクリメントされる限り、ループを継続するのです。値が前の値より小さくなったらすぐに、トレンドが途切れた、つまりピークを見つけたので、前のセルの番号をあらかじめ宣言した配列に格納する。今、トレンドは下降しています。ここで、次のセルが前のセルより高い値を見つけるまで検索を実行する。これが起こると、トレンドの反転が起こったので、前のセルの番号があらかじめ定義された配列に格納されます - 谷の底を発見したのです。異なる配列に数字を並べることで、谷からピークをフィルターにかけることができます。つまり、配列のすべての値を調べた後、ソートされたデータ(他の1つ/2つの配列のセルの数)を得ることができるのです。

そう、だから、しばらくやってみないと......それは最初のピークまでで、あとは......なんです。- 解らないんです。
 
drknn:
スクリーンショットではBB_MAインジケータが表示されていません。また、上位のコードにはトレンド方向のチェックはありません。BB変数には常に1つの値が格納される。私が理解した限りでは、BB_MAインジケータは移動平均線です。移動平均の方向を決定するためには、異なるローソク足、例えば1本目と2本目のローソク足で2つの値を持ち、これらの値を互いに比較する必要があります。だから、アッパーコードはその目的を一部しか果たしていないと言える。 。

いや、BB_MAはBears&Bulls_MAの略で、ブルとベアの値を足してヒストグラムとして表示するもので、マクダックとかと同じようなものです。常にヒストグラムがゼロより上にあるときは上昇トレンド、下にあるときは下降トレンド...

したがって、トレンドの方向を確認することは

if (BB>0 && OsMA>0 && AC1>AC2) return(1);

UP用と

if (BB<0 && OsMA<0 && AC1<AC2) return(-1);

DOWN用、ウェル用、そして

 else return(0);

をフラットにする。

つまり、Bears&Bulls_MAが0より上、OsMAが0より上、かつ最初のACバーの値が2番目のACバーの値より大きい場合、関数は1を返します。

であり、下降トレンドの場合はその逆となる。まあ、フラットについては、それ以外のチャートの違い(とりあえず...、後で整理したら、加減速と反転で動きの確認をつなげます)。

ポジションは、「上昇トレンド」または「下降トレンド」が明確な場合にのみ建てるべき...基本的にはすべてうまくいっていたのですが、通貨の移動速度を制御するためにACを追加し、トレンドの枯渇や修正時に移動の終わりにポジションを開くことを(部分的に)除外するようにしました。

今のところうまくいっていない...。とまさにAC。

 
IgorM:

最初のピークが来るまでの間だけで、その後は......。- 解らないんです。

いいえ、ループはforで行う必要があります。台本を作ってみようと思います。このアイデアは、実際に実現可能です。