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

 
freakout:
こんにちは。

親愛なるmladen、あなたに小さなお願いがあります - 下のインジケータが左上隅に表示するすべての情報をオフにすることができますか?

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

コメントのON/OFFのオプションを作りました。

ファイル:
 
paradise77:
こんにちは。

私は新参者です。私は矩形オブジェクトを更新したいのですが、方法がわかりません。以下のコードは、EMAが交差した場合に、オブジェクトの矩形を作成するために使用しました。これらの矩形は、価格がリトレースバックし、それに触れた場合、終了する必要があります。どのようにそれを行うには?

事前にありがとうございます。

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 clrLime

#property indicator_width1 2

#property indicator_color2 clrMagenta

#property indicator_width2 2

extern int EMA1 = 3;

extern int EMA2 = 21;

extern int EMA3 = 63;

extern double arrowDistance = 0.0003;

extern color upRectColor = clrYellow;

extern color dnRectColor = clrDodgerBlue;

extern color touchRectColor = clrDarkGray;

//---

extern double rectHigh = 0.0001;

extern int rectDays = 3;

extern int bars_limit = 2000;

extern bool showRectangle = true;

double upArrow[];

double dnArrow[];

double prev2EMA1, prev2EMA2, prev2EMA3;

double prevEMA1, prevEMA2, prevEMA3;

double curEMA1, curEMA2, curEMA3;

double prevOpenPrc, prevClosePrc, prevLowPrc, prevHighPrc;

string objRectName;

string rectArray[];

string indiName = "Emac";

int rectValidity = 0;

int arrayMaxAmounts = 99999;

int arrayCurAmount = 0;

int arrayLastAmount = 0;

//+------------------------------------------------------------------+

//| INIT() |

//+------------------------------------------------------------------+

int init() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

ArrayResize(rectArray,arrayMaxAmounts,arrayMaxAmounts);

IndicatorBuffers(2);

SetIndexBuffer(0,upArrow);

SetIndexBuffer(1,dnArrow);

SetIndexStyle(0,DRAW_ARROW);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexArrow(1,234);

SetIndexEmptyValue(0,0.0);

SetIndexEmptyValue(1,0.0);

SetIndexLabel(0,"Up");

SetIndexLabel(1,"Dn");

return(0);

}

//+------------------------------------------------------------------+

//| DEINIT() |

//+------------------------------------------------------------------+

int deinit() {

int k=0;

while (k<ObjectsTotal()) {

string objname = ObjectName(k);

if (StringSubstr(objname,0,StringLen("Emac")) == "Emac")

ObjectDelete(objname);

else

k++;

}

return(0);

}

//+------------------------------------------------------------------+

//| START() |

//+------------------------------------------------------------------+

int start() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

int limit,i,k;

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---

if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;

if (Bars<EMA1 || Bars<EMA2 || Bars0 && bars_limit0 && bars_limit0 && bars_limit<EMA3)) {

Alert("Adjust limit settings or put more bars on your chart!");

return(0);

}

//---

for (i=0; i<limit; i++) {

prev2EMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+2);

prevEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+1);

curEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i);

curEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i);

curEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i);

prevOpenPrc = iOpen(NULL,0,i+1);

prevClosePrc = iClose(NULL,0,i+1);

prevLowPrc = iLow(NULL,0,i+1);

prevHighPrc = iHigh(NULL,0,i+1);

rectValidity = rectDays*86400;

if ( (prev2EMA1=prevEMA2)&&(curEMA1>curEMA2)&&(prevEMA2>=prevEMA3)&&(curEMA2>curEMA3) ) { // up

upArrow = prevLowPrc - arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0,Time,prevLowPrc,Time+rectValidity,prevLowPrc+rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, upRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$up$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

if ( (prev2EMA1>prev2EMA2)&&(prevEMA1<=prevEMA2)&&(curEMA1<curEMA2)&&(prevEMA2<=prevEMA3)&&(curEMA2<curEMA3) ) { // down

dnArrow = prevHighPrc + arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0, Time,prevHighPrc,Time+rectValidity,prevHighPrc-rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, dnRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$dn$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

} // for

//----------------------- Edit Rectangle, change time2 & color, if price touched ----------------------

return(0);

} // start

//+------------------------------------------------------------------+

void DelObjects(string id) {

int ot1=ObjectsTotal();

while(ot1>=0) {

if (StringFind(ObjectName(ot1),id,0)>-1) {

ObjectDelete(ObjectName(ot1));

}

ot1--;

}

return;

}

//+------------------------------------------------------------------+

string FuncPeriodToStr(int thePeriod) {

switch(thePeriod) {

case 1: return("M1");

case 5: return("M5");

case 15: return("M15");

case 30: return("M30");

case 60: return("H1");

case 240: return("H4");

case 1440: return("D1");

case 10080: return("W1");

case 43200: return("MN1");

default: return("MN1");

}

}

//+------------------------------------------------------------------+

Mladenです。

矩形の編集について、手がかりになるものを教えていただけませんか?

私はこれを見つけました。

*)オブジェクトの種類 - MQL4 ドキュメント

*)オブジェクトのプロパティ - MQL4 Documentation

矩形のプロパティ(time1, price1, time2, price2, color)を取得し、price1またはprice2を現在のAsk/Bid価格と比較することができます。もし、Ask/Bid価格がprice1またはprice2に接触したら、次のことをしなければなりません。

a) Arrayは必要ありません。各矩形オブジェクトを見るだけです。

オブジェクトを削除し、新しいtime2とnewcolorを使用して再度作成します。

b) OBJPROP_PRICE1でのローソク足の位置を知るにはどうしたらよいでしょうか? 私たちは通常、次のようなforループを使っています。

for (i=limit; i>0; i--)

価格1のバーのiをどのように取得するのですか?

c) もし、矩形を削除して再作成しないなら、矩形の時間2と色を変更するためにObjectSetを使用するだけでよいのでしょうか?

ありがとうございます。

 
paradise77:
Mladenです。

矩形の編集について、手がかりになるようなことを教えてください。

私はこれを見つけた。

*)オブジェクトの種類 - MQL4 ドキュメント

*)オブジェクトのプロパティ - MQL4 Documentation

矩形のプロパティ(time1, price1, time2, price2, color)を取得し、price1またはprice2を現在のAsk/Bid価格と比較することができます。もし、Ask/Bid価格がprice1またはprice2に接触したら、次のことをしなければなりません。

a) Arrayは必要ありません。各矩形オブジェクトを見るだけです。

オブジェクトを削除し、新しいtime2とnewcolorを使用して再度作成します。

b) OBJPROP_PRICE1でのローソク足の位置を知るにはどうしたらよいでしょうか? 私たちは通常、"for "ループを使っています。

価格1を持つバーの "i "をどのように取得するのですか?

c) もし矩形を削除して再作成しないのであれば、矩形の時間2と色を変更するためにObjectSetを使用するだけでよいのでしょうか?

ありがとうございます。

あなたの場合、価格は問題ありません。左右のボックスを制限するためにtimesを使用する必要があります。

 

Cosmiclifeformです。

この作品をありがとうございました、実際に私はinstaforex demo.Iを使用して、通常のmethod.Iとして1M価格fiestをダウンロードし、EURUSDを使って、設定を行う、レポートタブとログの以下のスクリーンショートを参照してください。

//レポート、指摘したが、zerp、なぜですか?

cosmiclifeform:
こんにちは、Mastercashです。

FXDDのデモ口座でEAを走らせましたが...特に何もせず...Strategy Testerでデフォルト設定のままEAを走らせただけです。

もっとお役に立てればよかったのですが...具体的な手がかり(エラーログやスクリーンショット、その他の条件)がなければ、なぜ空白の結果が出るのかを突き止めることは不可能でしょう。

私がお勧めできるのは...

まず、テスターで正常に動作することを知っている良いEAを試してみてください。

そうすれば、あなたのデモ口座とあなたの手順の両方が問題ないことが証明されます。

まず、すべてが想定通りに動くという確信を得ましょう。

それから、あなたのNice TraderEAを試してみてください...そして、何が起こったかを正確に書き留めてください。真っ白な画面でもログを確認することができるはずです。

PRINTとCOMMENTステートメントをあらゆるところに追加してください...そしてもう一度ログをチェックしてください...EAタブとJournalタブの両方を...。

また、COMMENTは画面に表示されるので、EAが機能しているかどうかを実際に確認することができます。

良いコーディングの手助けを得るための最重要ポイントは...

あなたのEAで何が起こっているのか、可能な限り多くの手がかりを提供することです...

可能な限りのことを試し続けて、結果を教えてください。

よろしくお願いします。

ロバート
ファイル:
backtest1.png  14 kb
backtest2.png  3 kb
 
mladen:
あなたの場合、価格は問題ありません。左右のボックスを制限するために時間を使用する必要があります。

mladenさん、ありがとうございます。Time2を動的に使用しなければならないということでしょうか?Time1、price1、price2は固定です。しかし、Time2は現在のバー(i)に依存し、価格が矩形に触れるか、デフォルトの矩形設定時間より長くなるまで移動して いるのです。

つまり、矩形の色と時間2を変更することは不可能なのでしょうか?

ありがとうございます。

 
paradise77:
mladenさん、ありがとうございます。Time2を動的に使用しなければならないということでしょうか?Time1、price1、price2は固定です。しかし、Time2は現在のバー(i)に依存し、価格が矩形に触れるか、デフォルトの矩形設定時間より長くなるまで移動しているのです。

つまり、矩形の色と時間2を変更することは不可能なのでしょうか?

ありがとうございます。

パラダイス77

はい、そうです。

そうすれば、ボックスの右側のボーダーを常に調整できます(もちろん、調整が必要な場合ですが)。

 

Mladenさん、Mrtoolsさん、こんにちは。

私は視覚的なシステムが好きなので、あまり多くのアラートは好きではなく、ノイズやポップアップウィンドウは私の気を散らすだけです。私は、売られすぎや買われすぎのときにCCIのいくつかのアラートを設定するだけです。

それは、「私の」SSA+MAがMAとクロスしたときです。

もう一つ、私はいつもこの素敵なツールに3つのレベルを追加します。もちろん、ゼロライン、0.0だけでなく、-0.3と0.3。

SSAが-0.3レベルや0.3レベルを超えたら、アラートを出すようにしたい。0.0レベルは必要ない。

アラートとしては、簡単な音とポップアップ、それだけです。

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

ファイル:
ssa__ma.mq4  5 kb
 
Wulong10:
Mladenさん、Mrtoolsさん、こんにちは。

私は視覚的なシステムが好きなので、あまり多くのアラートは好きではなく、すべてのノイズやポップアップウィンドウは私の気を散らすだけです。売られすぎや買われすぎのときにCCIのアラートを設定する程度です。

それは、「私の」SSA+MAがMAとクロスしたときです。

もう一つ、私はいつもこの素敵なツールに3つのレベルを追加します。もちろん、ゼロライン、0.0だけでなく、-0.3と0.3。

SSAが-0.3レベルや0.3レベルを超えたら、アラートを出すようにしたい。0.0レベルは必要ない。

アラートとしては、簡単な音とポップアップだけでよいです。

ありがとうございます。

武龍10

SSAの特徴は、再計算のアルゴリズムであることです。アラートを 追加すると、クロスの位置が常に変わり、時にはクロスが完全に消えてしまうので、少なくとも私の意見では、賢明ではありません。非シグナルモード(推定のみ)で使用するのがベターです。

 

Mladenさん、こんにちは。

SSAは高いタイムフレームで再計算するのは知っています。

M5で使うと少し、M15で使うともっと変化しますが、M1ではこのインディーを何度もテストして、とても満足しています。私のセッティングでは、それほど大きな変化はありませんし、むしろ非常に正確です。

もちろん、価格が長く上昇または下降しているときは、あまり信頼できませんが、多くのインジケータでそうではないでしょうか?

それから、安全のために、チャート上に単純な移動平均 線を使うんだ。

他の人はアラートを使えないかもしれないが、私は使える。

CCIのアラートもいつも正しいとは限らないが、それは次に何が起こるかを示しているに過ぎない。

だから、SSAがアラートを出しても、それをどうするかは私次第で、私はそれが上手にできるようになったんです。

それに、SSAが好きなのは僕だけじゃないと思うんだ.

消える十字架?M1ではあまりないことで、私は何日もそのチャートを見ている.

だから、私は本当に可能であれば、アラートが欲しいです。

Danke schön !

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

SSAは高い時間軸で再計算されますよね。

M5では少し、M15ではもっと変化しますが、M1ではこのインディーを何度もテストして、とても満足しています。私のセッティングでは、それほど大きな変化はありませんし、むしろ非常に正確です。

もちろん、価格が長く上昇または下降しているときは、あまり信頼できませんが、多くのインジケータでそうではないでしょうか?

それから、安全のために、チャート上に単純な移動平均線を使うんだ。

他の人はアラートを使えないかもしれないが、私は使える。

CCIのアラートもいつも正しいとは限らないが、それは次に何が起こるかを示しているに過ぎない。

だから、SSAがアラートを出しても、それをどうするかは私次第で、私はそれが上手にできるようになったんです。

それに、SSAが好きなのは僕だけじゃないと思うんだ.

消える十字架?M1ではあまりないことで、私は何日もそのチャートを見ている.

だから、可能であれば、私は本当にアラートが欲しいです。

Danke schön !

Wulong10

SSAは常に再計算されます(私はそれを計算するためにそのDLを作ったものだったので、私を信じてください)。そのルールに例外はありません(どのような時間軸で使うかは関係ありません)。

また、計算回数が > 1 に設定されている場合は、すべてのバーを再計算します。計算回数が1に設定されている場合、少なくとも「遅れ」のあるバーが再計算されることになります。