どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 95

 
hoz:

i_の ついた変数は入力変数(intutという言葉から、ユーザーが変更できる...)で、ptも グローバル変数で、どこでも見える...です。いいえ、ロットは正規化されていません。テスターでは一度も遭遇したことがない...。また、ロットとオブジェクト(エラー4200)にはどのような関係があるのでしょうか?

ロットはどう関係するのですか?ロットが無効な場合、エラー処理関数が呼ばれ、オブジェクトがビルド されることになる。

ロットを間違えると、テスターにエラーが発生します。オブジェクトを作らないということですが、機能では

void pr (string txt)

は、まだオブジェクトを構築しています。

if(info[i]!=""){
cm=info[i];
ObjectCreate ("txtw"+i,OBJ_LABEL,0,0,0);
ObjectSet    ("txtw"+i,OBJPROP_CORNER,1);
ObjectSet    ("txtw"+i,OBJPROP_XDISTANCE,10);
ObjectSet    ("txtw"+i,OBJPROP_YDISTANCE,30+15*i);
ObjectSetText("txtw"+i,cm, 10, "Times New Roman", Green);}

そこにバグが埋まっているのでしょう。そこで何かしなければならないことがあるかもしれません。この関数のチャートの出力をコメントアウトします。エラーが無くなれば、その原因を関数に求めることになります。

void pr (string txt)
 
vovak_85:

こんにちは、私はmqlのプログラミングに新しいです。私が書いたものではないのですが、カスタムインジケーターがあり、それは矢印の形で売買シグナルを生成します。

インジケーターのコードです。

...

フォーラムにコードを 正しく貼り付けるには、SRCをクリックし、コードをコピーしてください。

 

SRCでコード挿入!!!

と邪魔にならないので、ぜひおすすめです

フォーラムナビゲーター、よくある質問とその回答。ぜひ読んでみてください。 ( 1 2 3 4 5 6 ) 52 18.02.2011 よくあるご質問

 

こんにちは、私はmqlのプログラミングに新しいです。私が書いたものではないのですが、カスタムインジケーターが あり、それは矢印の形で売買シグナルを生成します。

インジケーターコードです。

#property indicator_chart_window

#property indicator_buffers 7

#property indicator_color1 Red

#property indicator_color2 MediumBlue

#property indicator_color3 Red

#property indicator_color4 MediumBlue

#property indicator_color5 Blue

#property indicator_color6 Red

#property indicator_color7 Blue


extern int MM = 3;

extern int MP = 20;

double a[];

double b[];

double c[];

double d[];

double e[];

double g[];

double h[];

int x = 0;


int init() {

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, Red);

SetIndexBuffer( 0, a );

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, MediumBlue);

SetIndexBuffer(1, b);

SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 2, Red);

SetIndexBuffer(2, c);

SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 2, MediumBlue);

SetIndexBuffer(3, d);

SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(4, e);

SetIndexArrow(4, 233);

SetIndexStyle(5, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer( 5, g );

SetIndexArrow(5, 234);

SetIndexStyle(6, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(6, h);

SetIndexArrow(6, 233);

SetIndexDrawBegin(0, 5);

SetIndexBuffer( 0, a );

SetIndexBuffer(1, b);

SetIndexBuffer(2, c);

SetIndexBuffer(3, d);

return (0);

}


int deinit() {

return (0);

}


int start() {

double qw;

double qe;

double qr;

double qt;

double as;

double ad;

double af;

double ag;

int i,razmer;


if (Bars <= 10) return (0);

x = IndicatorCounted();

if (x < 0) return (-1);

if (x > 0) x--;

for (int zx = Bars - x - 1; zx >= 0; zx--) {

qw = iMA(NULL, 0, MP, 0, MM, PRICE_CLOSE, zx);

qe = iMA(NULL, 0, MP, 0, MM, PRICE_LOW, zx);

qr = iMA(NULL, 0, MP, 0, MM, PRICE_OPEN, zx);

qt = iMA(NULL, 0, MP, 0, MM, PRICE_HIGH, zx);

as = (c[zx + 1] + (d[zx + 1])) / 2.0;

ag = (qw + qt + qr + qe) / 4.0;

ad = MathMax(qt, MathMax(as, ag));

af = MathMin(qr, MathMin(as, ag));

if (as < ag) {

a[zx] = af;

if (a[zx] < b[zx] && a[zx + 1] < b[zx + 1] && a[zx + 2] > b[zx + 2] && a[zx + 3] > b[zx + 3])

e[zx] = af - 10.0 * Point;

else{

razmer=ArrayRange(4,1);

for (i=1;i<razmer;i++)

e[i]=0; }

b[zx] = ad;

} else {a[zx] = ad;

b[zx] = af;

if (a[zx] > b[zx] && a[zx + 1] > b[zx + 1] && a[zx + 2] < b[zx + 2] && a[zx + 3] < b[zx +

3]) g[zx] = af + 10.0 * Point;

}

c[zx] = as;

d[zx] = ag;

}

return (0);

}
Код советника для получения значений из индикатора и совершения сделки
double L_B=iCustom(0,0,"Makedonskii",MM,MP,0,4);

double L_S=iCustom(0,0,"Makedonskii",MM,MP,0,5);

if (L_B!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Ask, 10, Bid - 15*Point, Ask + 15*Point, "", MagicNumber, 0, Green);

if (L_S!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Bid, 10, Ask + 15*Point, Bid - 15*Point, "", MagicNumber, 0, Green);
Кому несложно подскажите как правильно получать значения на покупку и продажу
 
vovak_85:
知ってます、ありがとうございます! 直しますか?
前回の記事で訂正します。
 
vovak_85:
知ってます、ありがとうございます! 直しますか?
もちろんです!(笑不要な甘えを取り除くことで、!
 
hoz:

prは プリント機能です。そして、エラーですが、これはもう標準的な定数です。論理的に考えて、これはまったく許されることではありません。それでもpr 機能を疑うのであれば、こちらをご覧ください。


まあ、いつものプリントに置き換えて、ログを見てください。

オブジェクトが作成されると、オブジェクト名が一意でないため、オブジェクト作成 時にエラーが発生します。

 
artmedia70:

ロットと何か関係があるのでしょうか?もし、多くの誤りがあれば、エラー処理関数が呼び出され、オブジェクトを構築することになる。

ロットが間違っていれば、テスターにもエラーが発生します。オブジェクトを作らないということですが、機能では

オブジェクトはまだ作られています。

そこが問題なのでしょう。そこで何かしなければならないことがあるかもしれません。この関数のチャートの出力をコメントアウトします。エラーが無くなれば、エラーの原因を関数内に探すことになります。



私自身、すでにそのように考えていたのですが、あなたの回答がちょうど同じところに当たったのです。この機能で場所をコメントアウトすることで、問題は解消されました。どうやら、使用する際には、入力中のオブジェクトを一度に削除しなければならないようですね。つまり、pr 関数の一番最初で、ということです。
 
hoz:

私自身、すでに考えていたことですが、ちょうど今、あなたの回答が同じポイントを突いていました。この機能で場所をコメントアウトすることで、問題は解消されました。どうやら使うときは、入力上のオブジェクトをすべて一度に削除しなければならないようですね。つまり、pr 関数の一番最初に、つまり...

正直、あなたの機能のロジックはわかりません。オブジェクトを削除すべきなのか、構築すべきなのか、それはわかりません。何をさせたいのか言ってくれれば、どこのロジックがおかしいのか分かるはずです。しかし、この関数がグラフィカルオブジェクトを構築しようとしたが失敗した場合、それはすでに存在していることを意味します。では、プログラムのロジックによると次はどうなるのでしょうか?別の名前で新しいオブジェクトを構築することもできますし(例えば、オブジェクト名に現在時刻を 追加する(TimeToStr(TimeCurrent()))、すでにオブジェクトを持っているがそのプロパティを変更する必要がある場合、再度構築せずに、単にそのプロパティを変更するだけです。そうすれば、二度とエラーは表示されません。

というくらいにシンプルです。一番大事なのは、自分が何を求めているかを知ることです。:)

 
vovak_85:

こんにちは、私はmqlのプログラミングに新しいです。私が書いたものではないのですが、カスタムインジケーターがあり、それは矢印の形で売買シグナルを生成します。

インジケーターコードです。


中括弧はすべて揃っていますか?ところどころ欠けています。だから、あなたの論理は欠陥があるのです。そして、ほとんどの場合、その結果は期待したものではありません。