コーディングのヘルプ - ページ 38

 

...

インジケータでそれを行う唯一の方法は、何らかのイベント(キーボード、マウスなど)が検出されるまで、無限ループを続けることでしょう。

しかし、それはまた、端末関数の 残りの実行が停止していることを意味します(それはあなたがクラッシュする不良指標を持っているときと同じです - あなたのメタトレーダーをブロック)だから、それは良い解決策ではありません。通常、そのために使われる機能(スリープ)は、コードが一時停止している間、他のコードの実行を可能にします(それは、ターミナルの他のものに仕事をさせる時間になります)。

marley60:
アラームがあると、"pling "という音が一度だけ鳴ります。(理由: トイレやキッチンにいるときに「プリン」という音が聞こえない) アラーム音を歌に置き換えましたが、(tradestationにあったように)一度だけ再生するか止めるまで再生するかを選択できるようにしたいです。
 

インデックスに関する質問

こんにちは、Mladenです。

Ind[3][0][1] のようなインジケータが ありますが、1番目と2番目のインデックスの意味は何でしょうか?

よろしくお願いします。

kemal

 

EAにおけるジグザグ問題

こんにちは。

私のEAでは標準的なジグザグ・インディーを使っています。ジグザグのノードを決定するために以下のコードを使用しています。時々、MT4が間違ったタイムフレームからジグザグノードを返すことに気づきました。例えば、H1ジグザグノードを取得しようとすると、MT4はM15ジグザグノードの値を返します。このような問題に遭遇したことがある方はいらっしゃいますか?もし、ジグザグに関する詳細な情報と、考えられる問題点をご存知でしたら、アドバイスをお願いします。

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

FFJason

注:TFは、ジグザグノードを取得するために、異なるタイムフレームから異なる値をフィードするタイムフレームです。特定のTFを使用すると、なぜかMT4はノードの値を混同してしまいます。

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{ int t=0; int p=0; int q=0; double nd2i;

for (i=0; i<=150; i++)

{ nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

 

前の注文のS/Lの後、新しい注文を開くには?

前の注文のS/Lの後に新しい注文を出す。
親愛なる先生。

EAで、前の注文をS/Lで決済した後、新しい注文を出すプログラムをご存知の方はいらっしゃいますか?

課題
 

...

おそらく、ある時間枠のZigZagピークと他の時間枠のZigZagピークが同じ場合(ピークを探しているのだから、珍しいケースではない)でしょう。時間枠に関しては、そのコードで正しい時間枠の値が得られています。多分、4つの最後のZigZagの値を得ることを確実にするために、コードを1つだけ変更する必要があり、そうすると、コードは次のようになります。

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{

int p=0; int q=0; int max=iBarShift(NULL,TF,0); double nd2i;

for (int i=0; i<max; i++)

{

nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

[/PHP]

As you can see only the loop end is changed from "150" to "Bars-1"

novalight:
Hi,

I use standard Zigzag indy in my EA. I use the following code to determine the zigzag nodes. I noticed that sometimes the MT4 returns the zigzag nodes from the wrong time frame. For example, when I try to get H1 zigzag nodes, MT4returns M15 zigzag node values. Has anyone come across such problem before? If you know more info about zigzag and the possible problem area, please advise.

Many thanks.

FFJason

note: TF is the time frame which I feed different values for getting zigzag nodes from different time frame. Somehow MT4 mixed up the node values when a specific TF is used.

[PHP]

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{ int t=0; int p=0; int q=0; double nd2i;

for (i=0; i<=150; i++)

{ nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

 

EAのZigZag問題

こんにちは、メイデンです。

ご教授ありがとうございます。

iBarShiftについて少し読んでみましたが、あなたのiBarShift(NULL,TF,0)はチャート上のバーの 総数を取得するようです。iBarShiftを使用する意図を私が誤解していたら、訂正してください。

私はZigZagが間違ったノード値を返した例を見て、検索数(私は150を使っています)は問題ではありませんでした。また、異なる時間枠で同じノードがあることは理解していますが、私が見つけたエラーは、2つ以上のノードと対応するバー番号がすべて異なる時間枠を指しているものでした。これが私を困惑させた問題でした。

今日、Zigzagでもっと不可解な問題を発見しました。このルーチンが返すノードを表示するためにAlertを使用していますが、時々、ノードとそのバー番号の正しいペアが返されますが、他のノードとバー番号が両方とも0であることを発見しました。私は、以下のコードでノードが0値にならないようにすることで、ルーチンをさらに強化しました。ただ、MT4が心拍を飛ばして失速し、私のEAにゴミを投げつけていないことを祈るのみです。なぜこんなことを言うかというと、私の他のEAでは、プログラムがSLとTPを挿入しようとしたり、OP値を集めようとするとアラートメッセージが表示されるのですが、MT4がこれらのステップをスキップして0値を返してしまうことがよくあったからです。私は、これらのインスタンスを探し出し、これらのタスクが適切に実行されることを確認するために、私のプログラムを強化する必要があります。

アドバイスをお願いします。私の知恵の限界です。あなたの助けは非常にありがたいです。乾杯

Novalight

int iGetNode4(int TF, double& lwnd4, double& hgnd4, int& lwnd4bar, int& hgnd4bar)

{ lwnd4=0; hgnd4=0; lwnd4bar=0; hgnd4bar=0; int t=0,p=0; //node 4 = arrow

for (i=0; i<=120; i++)

{ double lowi=iLow(NULL,TF,i); double highi=iHigh(NULL,TF,i);

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==lowi && lowi!=0) {if (t==0) {lwnd4=iLow(NULL,TF,i); lwnd4bar=i; t++; if(lwnd4==0) Alert(lwnd4);}}

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==highi && highi!=0) {if (p==0) {hgnd4=iHigh(NULL,TF,i); hgnd4bar=i; p++;if (hgnd4==0) Alert(hgnd4);}}

if (t==1 && p==1) break;

}

if (lwnd4bar<hgnd4bar) return(1); //current node 4 is a low node for Long

if (lwnd4bar>hgnd4bar) return(-1); //current node 4 is a high node for Short

return;

}

[/PHP]

mladen:
You probably have a case when the ZigZag peak of one time frame is the same as the ZigZag peak of another time frame (which is not an unusual case since they are looking for peaks). As far as time frames are concerned, you are getting correct time frame values with that code. Maybe just one change in the code has to be done in order to ensure that you get 4 last ZigZag values, and then the code would be like this

[PHP]void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{

int p=0; int q=0; int max=iBarShift(NULL,TF,0); double nd2i;

for (int i=0; i<max; i++)

{

nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

As you can see only the loop end is changed from "150" to "Bars-1"
 

...

iBarShift(NULL,TF,0)の場合:はい、ターゲットタイムフレームのバーの合計を返します。しかし、このループはそれほど多く実行されるわけではなく、最後の4つのZigZagピークが見つかるとすぐに存在することになります。

例えば、1つの時間枠でこの関数を呼び出し、最後の4つのピークを探すために150本の制限を設けたとします。そして、別の時間枠を調べます。そして、議論のために、4番目のピークが最初の150本の外にあると想像してください。どうなるでしょうか。配列がクリーニングされていないため、150本目の時点で4つのピークがすべて見つかったわけではなく、以前見つかったピークのいくつかは現在探している時間枠で見つかったままになっているため、以前探した時間枠の結果の一部が残っています。

このコードを追加した目的は、実際に最後の4つのピークを見つけることを確認するためです。時には10本、時には1000本(これは完全にZigZagに依存し、固定された本数では ありません)かかりますが、それは「バー」回をループするものではありません。必要な回数だけループさせ、4つのピークがすべてターゲット時間枠からであることを確認します。

時間枠の混在については、私はそれが起こっているとは思わない。ターゲットタイムフレームのヒストリーファイルを開く方法(シンボル名にターゲットタイムフレームの分数を追加するだけ)は、タイムフレームのパラメータを変更しない場合、1つのループで2つのタイムフレームからデータを読み込むことは不可能です(その場合、1つのヒストリーファイルしか開かず、異なるタイムフレームのデータにアクセスできません)。

novalight:
こんにちは、メイデンさん。

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

iBarShiftについて少し読んでみましたが、あなたのiBarShift(NULL,TF,0)はチャート上のバーの総数を取得するようです。iBarShiftを使用する意図を私が誤解していたら、訂正してください。

私はZigZagが間違ったノード値を返した例を見て、検索数(私は150を使っています)は問題ではありませんでした。また、異なる時間枠で同じノードがあることは理解していますが、私が見つけたエラーは、2つ以上のノードと対応するバー番号がすべて異なる時間枠を指しているものでした。これが私を困惑させた問題でした。

今日、Zigzagでもっと不可解な問題を発見しました。このルーチンが返すノードを表示するためにAlertを使用していますが、時々、ノードとそのバー番号の正しいペアが返されますが、他のノードとバー番号が両方とも0であることを発見しました。私は、以下のコードでノードが0値でないことを保証することによって、ルーチンをさらに強化しました。ただ、MT4が心拍を飛ばして失速し、私のEAにゴミを投げつけていないことを祈るばかりです。なぜこんなことを言うかというと、私の他のEAでは、プログラムがSLとTPを挿入しようとしたり、OP値を集めようとするとアラートメッセージが表示されるのですが、MT4がこれらのステップをスキップして0値を返してしまうことがよくあったからです。私は、これらのインスタンスを探し出し、これらのタスクが適切に実行されることを確認するために、私のプログラムを拡張する必要があります。

アドバイスをお願いします。私の知恵の限界です。あなたの助けは非常にありがたいです。乾杯

ノヴァライト

int iGetNode4(int TF, double& lwnd4, double& hgnd4, int& lwnd4bar, int& hgnd4bar)

{ lwnd4=0; hgnd4=0; lwnd4bar=0; hgnd4bar=0; int t=0,p=0; //node 4 = arrow

for (i=0; i<=120; i++)

{ double lowi=iLow(NULL,TF,i); double highi=iHigh(NULL,TF,i);

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==lowi && lowi!=0) {if (t==0) {lwnd4=iLow(NULL,TF,i); lwnd4bar=i; t++; if(lwnd4==0) Alert(lwnd4);}}

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==highi && highi!=0) {if (p==0) {hgnd4=iHigh(NULL,TF,i); hgnd4bar=i; p++;if (hgnd4==0) Alert(hgnd4);}}

if (t==1 && p==1) break;

}

if (lwnd4bar<hgnd4bar) return(1); //current node 4 is a low node for Long

if (lwnd4bar>hgnd4bar) return(-1); //current node 4 is a high node for Short

return;

}

 

EAのZigZag問題

メイデンさん、こんにちは。

おっしゃるとおりです。4つのノードがすべて見つからないと、どのノードが最初か最後かを識別するロジック全体が狂ってしまいます。

結論としては、ZigzagもMT4も何も問題なく、単に検索数を少なく設定した私のミスです。お時間を割いていただき、忍耐強く、そして何より助けて くださるお気持ちに感謝します.

お元気で.

ノバライト

mladen:
iBarShift(NULL,TF,0) : はい、これはターゲットタイムフレームのバーの合計を返します。しかし、ループはそれほど多く実行されず、最後の4つのZigZagピークが見つかるとすぐに存在することになります。

今、議論のために、次のことを想像してください:あなたは、1つの時間枠のために関数を呼び出すと、最後の4つのピークを探すために150バーの制限を持っています。そして、別の時間枠を調べます。そして、議論のために、4番目のピークが最初の150本の外にあると想像してください。どうなるでしょうか。配列がクリーニングされていないため、150本目の時点で4つのピークがすべて見つかったわけではなく、以前見つかったピークのいくつかは現在探している時間枠で見つかったままになっているため、以前探した時間枠の結果の一部が残っています。

このコードを追加した目的は、実際に最後の4つのピークを見つけることを確認するためです。時には10本、時には1000本(これは完全にZigZagに依存し、固定された本数ではありません)かかりますが、それは「バー」回をループするものではありません。必要な回数だけループし、4つのピークがすべてターゲットタイムフレームのものであることを確認します。

時間枠の混在に関しては、私はそれが起こっているとは思いません。ターゲットタイムフレームの履歴ファイルを開く方法(シンボル名にターゲットタイムフレームの分数を追加するだけ)は、タイムフレームパラメータが変更されない場合、1つのループで2つのタイムフレームからデータを読み込むことは不可能です(その場合、1つの履歴ファイルのみが開き、異なるタイムフレームからのデータにアクセスすることはできないのです)。
 

コードのヘルプ

どなたか、SnakeBordersのインジケーターに、以下の2つのプロットを追加するコードを親切に教えていただけませんか?

1.1. 白い範囲の真ん中をプロットするラインプロット(写真に赤い線で描かれているように)。

2.2. 黄色のラインプロットの反対側をプロットするラインプロット(写真のシアン線で描かれているように)snakeborders.mq4

ファイル:
sb.gif  39 kb
 

このインジケータを作るのを手伝ってくれる人を探しています

欲しい指標

条件

購入するときボディキャンドル価格はMAインジケータとRSI > RSI 50の上にクロスした後、ろうそくを閉じ、新しいろうそくを開始1青い矢印と青のラインまで売る。

ボディキャンドル価格がクロスボトムMA指標とrsi <ろうそくを閉じた後rsi 50は、新しいろうそくは、購入するまで1つの赤い矢印と赤線を開始したときに販売する。

あまりにも値を変更するための入力を追加してください

私の悪い英語で申し訳ありません

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