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

 
mntiwana:
親愛なるMLADEN。

しかし、我々は我々の仕事をすることが簡単で快適です。私があなたの親切な助けと指導で変更した添付のEAに追加/マージしたいBEコードでいくつかの簡単なトレーリングストップをお願いします、私は急いでいない、それはあなたが可能なときに、私はどのくらいのものが広がって、あなたを待って知っている、ありがとうございます。

よろしくお願いします。

シンプル_ma_cross_eamod-hp.mq4

OKです。されるでしょう。

 
 

皆さん、こんにちは。

私の投稿を読むのに時間を割いていただきありがとうございます。私はコードに関しては全くの初心者です。このEAを動作させるためにいくつかのことを試しましたが、答えにはなりませんでした。私は、リフレッシュ/リロードなどが発生したときに再起動する代わりに、発生した内容を記憶するためにこれが必要だと思うので、グローバル変数を勉強しています。バックテストでは完璧に動作するのですが、ライブで動作させるとなぜか取引や決済が止まってしまい、どうしても解決できません。また、これらのことを行う方法を学ぼうとしていますが、私はまだ始めたばかりなので、私が間違った方法を取っていたら許してください。EAには開始時間と終了時間があり、その間にx回の取引を行い、これが終了すると1サイクルが終了します。1つの時間帯に1つのサイクルしかできないように設定されています。

どなたかこのコードを見て、問題が何であるかを確認していただけませんか?よろしくお願いします。

maa1

quantum_shaolin_1.3.2.mq4

量子.mq4

ファイル:
 

Mladenさん、こんにちは。

私は、あるシンボルの売買の機会を示している指標の数を示すスキャナー指標を持っており、複数の時間枠でシンボルをスキャンしています。

問題は、このインジケータは、実際にはインジケータがないときでも、常にインジケータがあると言っていることです。この場合、インジケータの金額は常に同じ数字になります。

以下のコードを見てください。

double BufferALL[22];

int Timeframe[7][3]={15,,, 60,,, 240,,, 1440,,, 10080,,, 43200,, ,,};

for(x=0; x<=5; x++) {

if ((SymbolBars[y][x]==iBars(symbol[y],Timeframe[x][0]))&&(SymbolBars[y][x+1]==iBars(symbol[y],Timeframe[x+1][0]))) continue;

BufferALL[0]=indi1(symbol[y],Timeframe[x][0]);

//BufferALL[1]=ind2i(symbol[y],Timeframe[x][0]);

BufferALL[2]=ind3i(symbol[y],Timeframe[x][0]);

BufferALL[3]=ind4i(symbol[y],Timeframe[x][0]);

BufferALL[4]=ind5i(symbol[y],Timeframe[x][0]);

BufferALL[5]=indi(symbol[y],Timeframe[x][0]);

BufferALL[6]=indi(symbol[y],Timeframe[x][0]);

BufferALL[7]=indi(symbol[y],Timeframe[x][0]);

BufferALL[8]=indi(symbol[y],Timeframe[x][0]);

BufferALL[9]=indi(symbol[y],Timeframe[x][0]);

BufferALL[10]=indi(symbol[y],Timeframe[x][0]);

BufferALL[11]=indi(symbol[y],Timeframe[x][0]);

BufferALL[12]=indi(symbol[y],Timeframe[x][0]);

BufferALL[13]=indi(symbol[y],Timeframe[x][0]);

BufferALL[14]=indi(symbol[y],Timeframe[x][0]);

BufferALL[15]=indi(symbol[y],Timeframe[x][0]);

BufferALL[16]=indi(symbol[y],Timeframe[x][0]);

BufferALL[17]=indi(symbol[y],Timeframe[x][0]);

BufferALL[18]=indi(symbol[y],Timeframe[x][0]);

BufferALL[19]=indi(symbol[y],Timeframe[x][0]);

BufferALL[20]=indi(symbol[y],Timeframe[x][0]);

BufferALL[21]=indi(symbol[y],Timeframe[x][0]);

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

} // end of timeframe loop 6 iterations

すべてがアラートメッセージに表示されるとき、EURUSD: 15m/60m/4u/1d/1w/1mo is indicating a buying opportunity 7/7/7/7/7/7 のようなものが出てきます。

これは、各時間枠の7つの指標を合計したことを意味し、明らかに誤りです。私はすべての関数の 呼び出しを取り出すときにも、それはこのように述べています。これを実行すると、BufferALL[]のすべての要素が空になります。

しかし、明らかにEMPTYという値は、例えば534653647457のような他の値と比較することができる値であるようです。534653647457と比較するために >= または = 534653647457 を使用すると、/7/7/7/7/7/7のメッセージが停止してしまいます。どうしたらよいでしょうか?

 
mrcodix:
こんにちは、Mladenです。

私は、特定のシンボルで売買の機会を示している指標の数を示すスキャナー指標を持っており、それは複数の時間枠でシンボルをスキャンします。

問題は、このインジケータは、実際にはそうでない場合でも、常にインジケータがあることを示すということです。この場合、インジケータの金額は常に同じ数字になります。

以下のコードを見てください。

double BufferALL[22];

int Timeframe[7][3]={15,,, 60,,, 240,,, 1440,,, 10080,,, 43200,, ,,};

for(x=0; x<=5; x++) {

if ((SymbolBars[y][x]==iBars(symbol[y],Timeframe[x][0]))&&(SymbolBars[y][x+1]==iBars(symbol[y],Timeframe[x+1][0]))) continue;

BufferALL[0]=indi1(symbol[y],Timeframe[x][0]);

//BufferALL[1]=ind2i(symbol[y],Timeframe[x][0]);

BufferALL[2]=ind3i(symbol[y],Timeframe[x][0]);

BufferALL[3]=ind4i(symbol[y],Timeframe[x][0]);

BufferALL[4]=ind5i(symbol[y],Timeframe[x][0]);

BufferALL[5]=indi(symbol[y],Timeframe[x][0]);

BufferALL[6]=indi(symbol[y],Timeframe[x][0]);

BufferALL[7]=indi(symbol[y],Timeframe[x][0]);

BufferALL[8]=indi(symbol[y],Timeframe[x][0]);

BufferALL[9]=indi(symbol[y],Timeframe[x][0]);

BufferALL[10]=indi(symbol[y],Timeframe[x][0]);

BufferALL[11]=indi(symbol[y],Timeframe[x][0]);

BufferALL[12]=indi(symbol[y],Timeframe[x][0]);

BufferALL[13]=indi(symbol[y],Timeframe[x][0]);

BufferALL[14]=indi(symbol[y],Timeframe[x][0]);

BufferALL[15]=indi(symbol[y],Timeframe[x][0]);

BufferALL[16]=indi(symbol[y],Timeframe[x][0]);

BufferALL[17]=indi(symbol[y],Timeframe[x][0]);

BufferALL[18]=indi(symbol[y],Timeframe[x][0]);

BufferALL[19]=indi(symbol[y],Timeframe[x][0]);

BufferALL[20]=indi(symbol[y],Timeframe[x][0]);

BufferALL[21]=indi(symbol[y],Timeframe[x][0]);

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

} // end of timeframe loop 6 iterations

すべてがアラートメッセージに表示されるとき、EURUSD: 15m/60m/4u/1d/1w/1mo is indicating a buying opportunity 7/7/7/7/7/7 のようなものが得られます。

これは、各時間枠の7つの指標を合計したことを意味し、明らかに誤りです。私はすべての関数の呼び出しを取り出すときにも、それはこのように述べています。私がこれを行うとき、BufferALL[]のすべての要素は空です。

しかし、EMPTYという値は、例えば534653647457のような他の値と比較することができる値であることは明らかです。534653647457と比較すると、/7/7/7/7/7/7が停止してしまいます。どうしたらよいでしょうか?

mrcodix

インジケータが何をするのか(戻り値は何か)正確に知らないで、私ができることは野生の推測だけで、それは全く助けにならないでしょう。

 
mladen:

mrcodix

インジケータが何をするのか(戻り値が何なのか)正確に分からないと、私にできるのは野生の推測だけで、それは全く役に立ちません。

Mladenさんへ。

インジケータが原因ではないので、戻り値を知る必要はありません。各コード行の前に"//"を追加して、すべての呼び出し関数を 無効にすると、まったく同じ問題が発生します(それらをコメント行に変える)。この部分の=の後ろの値も同じです。

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}[/CODE]

it might aswell be something like

for(z=0; z<=14; z++){

if (BufferALL[z] >=1111111111111) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=2222222222222) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 333333333333) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 444444444444) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

it will give the same exact alert message that says /15m/60m/4u/1d/1w/1mo/ is indicating a buying opportunity /7/7/7/7/7/7/. I disabled all the function call lines with // so the BufferALL[22] elements should be EMPTY, they shoulden't contain any value whatsoever. Yet, when the computer comes at the if condition parts BufferALL[z] >=1111111111111 etc it ALWAYS states that the "value" thats inside BufferALL[z] is larger then 11111111111 (or any value you wish to put behind it). The only way to make these additions stop is by changing the if condition = into ==. When the computer asks whether the empty value of BufferALL[z] is exactly the same as 11111111 or 22222 or whatever value you wish to compare, it doesen't return a true and Timeframe is not added with +1. Please try it for youself. I will add the message construction code below:

[CODE]

int SymbolBars[216][7];

if (((Timeframe[0][1] > 0) && (Timeframe[1][1] > 0) && (SymbolBars[y][0]!=iBars(symbol[y],Timeframe[0][0]))&&(SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))) || ((Timeframe[1][1] > 0) && (Timeframe[2][1] > 0)&& (SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))&&(SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))) || ((Timeframe[2][1] > 0) && (Timeframe[3][1] > 0)

&& (SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))&&(SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))) || ((Timeframe[3][1] > 0) && (Timeframe[4][1] > 0) && (SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))&&(SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0]))) || ((Timeframe[4][1] > 0) && (Timeframe[5][1] > 0)&& (SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0])) &&(SymbolBars[y][5]!=iBars(symbol[y],Timeframe[5][0]))))

{

if (Timeframe[0][1]>0)

{

StringAdd(alarmbericht,"15m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[0][1],"/"));

SymbolBars[y][0]=iBars(symbol[y],15);

}

if (Timeframe[1][1]>0)

{

StringAdd(alarmbericht,"60m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[1][1],"/"));

SymbolBars[y][1]=iBars(symbol[y],60);

}

if (Timeframe[2][1]>0)

{

StringAdd(alarmbericht,"4u/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[2][1],"/"));

SymbolBars[y][2]=iBars(symbol[y],240);

}

if (Timeframe[3][1]>0)

{

StringAdd(alarmbericht,"1d/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[3][1],"/"));

SymbolBars[y][3]=iBars(symbol[y],1440);

}

if (Timeframe[4][1]>0)

{

StringAdd(alarmbericht,"1w/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[4][1],"/"));

SymbolBars[y][4]=iBars(symbol[y],10080);

}

if (Timeframe[5][1]>0)

{

StringAdd(alarmbericht,"1mo/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[5][1],"/"));

SymbolBars[y][5]=iBars(symbol[y],43200);

}

Alert(+symbol[y]+" "+alarmbericht+" are indicating a selling opportunity. " +indicatoraantal+".");

alarmbericht = "";

indicatoraantal = "";

}

if (((Timeframe[0][2] > 0) && (Timeframe[1][2] > 0) && (SymbolBars[y][0]!=iBars(symbol[y],Timeframe[0][0]))&&(SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))) || ((Timeframe[1][2] > 0) && (Timeframe[2][2] > 0)&& (SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))&&(SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))) || ((Timeframe[2][2] > 0) && (Timeframe[3][2] > 0)

&& (SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))&&(SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))) || ((Timeframe[3][2] > 0) && (Timeframe[4][2] > 0) && (SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))&&(SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0]))) || ((Timeframe[4][2] > 0) && (Timeframe[5][2] > 0)&& (SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0])) &&(SymbolBars[y][5]!=iBars(symbol[y],Timeframe[5][0]))))

{

if (Timeframe[0][2]>0)

{

StringAdd(alarmbericht,"15m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[0][2],"/"));

SymbolBars[y][0]=Bars(symbol[y],15);

}

if (Timeframe[1][2]>0)

{

StringAdd(alarmbericht,"60m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[1][2],"/"));

SymbolBars[y][1]=Bars(symbol[y],60);

}

if (Timeframe[2][2]>0)

{

StringAdd(alarmbericht,"4u/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[2][2],"/"));

SymbolBars[y][2]=Bars(symbol[y],240);

}

if (Timeframe[3][2]>0)

{

StringAdd(alarmbericht,"1d/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[3][2],"/"));

SymbolBars[y][3]=Bars(symbol[y],1440);

}

if (Timeframe[4][2]>0)

{

StringAdd(alarmbericht,"1w/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[4][2],"/"));

SymbolBars[y][4]=Bars(symbol[y],10080);

}

if (Timeframe[5][2]>0)

{

StringAdd(alarmbericht,"1mo/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[5][2],"/"));

SymbolBars[y][5]=Bars(symbol[y],43200);

}

Alert(+symbol[y]+" "+alarmbericht+" are indicating a buying oppertunity. " +indicatoraantal+".");

alarmbericht = "";

indicatoraantal = "";

}
 

Mladenです。

すべてのインジケータのコールをコメント行に変えて削除したときの連続アラートメッセージの例です。

買い時であれば、すべての可能な時間枠のインジケータの合計が15です。BufferALL[]はEMPTYなので、これは全く意味をなしません。

最後に、話がそれますが。以前、スキャナインジケータが複数のシンボルを連続してスキャンすることについて質問したことがあります。その際、現在のシンボルがそれほど頻繁に更新されない(1秒あたりのティックが少ない)チャートにインジケータを取り付けた場合、より頻繁に変化するシンボルのティックをすべて取得することはできないのではないかと考えていました。つまり、理論的には、インジケータが20:05の5分足バーの中にいる一方で、より速く更新されるシンボルは20:10にすでにスキャンされていることになります。これは、新しいバーは20:04:59の後の最初のティックで始まり、時計が20:05:00になると始まらないからです。新しいメタトレーダーでは、スタート{リターン}プロシージャが新しいティックごとにアクティブにならなくなったため、すべてのシンボルが固定されたチェック速度でチェックされると言いました。その代わり、固定速度で起動されます。これは真実ではないことが判明しました。私の全てのインジケータをスキャナーインジケータ自体のコードに含まれる関数に変えた後、インジケータ全体を実行するとまだmt4がフリーズしました。つまり、iCustom()を使ってコードを呼び出しても、コードを挿入して内部関数に変えても、全く違いはなく、やはりフリーズしてしまうのです。しかし、215回繰り返される長いマスターループを捨て(各繰り返しでsymbol[y]のうち異なるシンボルが処理されます)、各ティック後に追加される変数に置き換えることで、この解決策を発見しました。この変数を使ってコンピュータにどのシンボルを使うべきかを指示し、216個のシンボルを毎ティック 分析する代わりに(全体がフリーズしてしまいますが)、1つのシンボルだけを毎ティック分析するようにしています。加算変数が215に達すると0にリセットされ、216のサイクルが再び始まります。これですべてのシンボルが分析され、216のすべてのシンボルが毎ティックで分析されたときより少し遅くなりますが、(もちろんフリーズしなければ)....とにかく。ポイントは、Start{}はチャートの現在のシンボルが更新されているときだけアクティブになることです。つまり、非常にアクティブなシンボル(EURUSDなど)とは対照的に、あまりアクティブでないシンボル(株式など)を指標とする場合、216のシンボルをすべて見て回るには時間がかかるということです。そのため、Start{}は新しいティックごとにまだ有効です。

ファイル:
 

Mladenさん、Mrtoolsさんこんにちは、大変うれしくお願いします。

添付のインジケーターをコンパイルする際に2つのエラーが発生する問題を解決していただけると助かります。

事前にありがとうございました

モレノ

PS:私は私の英語のために申し訳ありません:-)

ファイル:
 
morenokosta:
こんにちはMladenとMrtools、私は大きな喜びをお願いします。

添付のインジケーターをコンパイルする際に2つのエラーが発生する問題を解決していただけると親切です。

よろしくお願いします。

モレノ

PS: 私の英語で申し訳ありません:-)

morenokosta

そのインジケータは、私たちはそのままOKです

いいえ、任意のコードを変更する必要はありません

 

こんにちは、Mladenです。

このインジケーターにアラートを 追加していただけませんか?

ありがとうございます。

ファイル:
cross.mq4  2 kb