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

 
Techno:
できます。いつものエキスパート/スクリプト

もしかしたら、すでに似たようなものがあるかもしれませんが、どこにあるか教えてください。または、書ける人を知っていますか?

 

ヘルププロ

以下のコード片は動作しません。

MA値を算出し、MA変数に代入する。

を正しく表示しますが、配列には代入されません。配列の定義は、double

ダイナミックなprintプロシージャは、配列のNULL値を表示します。

i=i_max; // ...与えられた数値を計算する。

if (flag_NewBar==true) // 最初のティック到着時のみ再計算を行う

{

while(i>=0) // 未読のバーでループする。

MA=iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i);

MA=NormalizeDouble(MA,Digits)とする。

mas_MA[i]=MA;

i--; }

 

なぜエラー130が発生するのか理解できないのですが?よろしくお願いします。

以下はそのコードです。

   double myPrice      = NormalizeDouble(Bid - 10*Pnt*10,Digits);
   double myTakeProfit = NormalizeDouble(myPrice + TakeProfit * Pnt*10,Digits);                                                     //
   if (RAVI0_2_24_D1 > 1 && RAVI0_2_24_D1 < 5 && RAVI0_2_24_D1_1 < RAVI0_2_24_D1 && RAVI0_2_24_D1_2 < RAVI0_2_24_D1_1 && RAVI0_2_24_D1_3 < RAVI0_2_24_D1_2) myTakeProfit = myTakeProfit + 25 * Pnt*10;
   double myStopLoss   = NormalizeDouble(myPrice - StopLoss * Pnt*10,Digits);
   datetime myTimeEnd  = TimeCurrent() + wait*60;
   Alert("OP_BUYLIMIT: Spread=",MarketInfo(Symbol(),MODE_SPREAD)," Stop=",DoubleToStr(MarketInfo(Symbol(), MODE_STOPLEVEL), 2)," lot=",DoubleToStr(lotMM,3)," Pr=",DoubleToStr(myPrice,6)," SL=",DoubleToStr(myStopLoss,6)," TP=",DoubleToStr(myTakeProfit,6));
   ticket=OrderSend(Symbol(),OP_BUYLIMIT,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,ExpertName, MagicNumber,myTimeEnd,myColor);

わざとAlertを挿入して問題を確認するも、見つからない。

アラートのメッセージはこちらです。

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50セント iK EURUSD,M1: OrderSend error130

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50 cent iK EURUSD,M1: Alert: OP_SELLLIMIT: Spread=1 Stop=10.00 Lot=0.010 Pr=1.280300 SL=1.320300 TP=1.240300です。

 
VNG:

ヘルププロ

以下のコード片は動作しません。

MA値を算出し、MA変数に代入する。

を正しく表示しますが、配列には代入されません。配列の定義は、double

ダイナミックなprintプロシージャは、配列のNULL値を表示します。

i=i_max; // ...与えられた数値を計算する。

if (flag_NewBar==true) // 最初のティック到着時のみ再計算を行う

{

while(i>=0) // 未読のバーでループする。

MA=iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i);

MA=NormalizeDouble(MA,Digits)とする。

mas_MA[i]=MA;

i--; }

IMHO 配列は、「描画」用に設計されたインジケータ内の配列を除いて、一定の大きさを持つべきです。挿入されるべきだと思います。
ArrayResize(mas_MA,i_max);
 
globad:

皆さん、アドバイスをお願いします。0.1~0.4秒間に10~11pを過ぎるとビープ音が鳴るようなプログラムは作れないでしょうか?

0.1~0.4秒は1ティック、1ティックごとに市場全体の概観を変化させるという方法を提案します。
ファイル:
temp_4.mq4  4 kb
 
ikatsko:

なぜエラー130が発生するのか理解できないのですが?よろしくお願いします。

以下はそのコードです。

わざとAlertを挿入して問題を確認するも、見つからない。

アラートのメッセージはこちらです。

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50セント iK EURUSD,M1: OrderSend error 130

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50 cent iK EURUSD,M1: Alert: OP_SELLLIMIT: Spread=1 Stop=10.00 Lot=0.010 Pr=1.280300 SL=1.320300 TP=1.240300です。


ステップバイステップで、始値をオーバーシュートするストップ(振り子が始値より低いため)を定数に変更し、ほぼ誤差の範囲内であることを突き止めます。

ヘルプより「保留中の注文の開始価格が正しくない場合、エラー 130(ERR_INVALID_STOPS)が発生します」。

ticket=OrderSend(Symbol(),OP_BUYLIMIT,1,Close[0]+DoubleToStr(MarketInfo(Symbol(), MODE_STOPLEVEL), 2)*2,15,0,0,ExpertName, MagicNumber,myTimeEnd,myColor);
 
VNG:

よろしくお願いします

以下のコード片は動作しません。

MA値を算出し、MA変数に代入する。

を正しく表示しますが、配列には代入されません。配列の定義は、double

ダイナミックなprintプロシージャは、配列のNULL値を表示します。

i=i_max; // ...与えられた数値を計算する。

if (flag_NewBar==true) // 最初のティック到着時のみ再計算を行う

{

while(i>=0) // 未読のバーでループする。

MA=iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i);

MA=NormalizeDouble(MA,Digits)とする。

mas_MA[i]=MA;

i--; }

読む

https://book.mql4.com/ru/operators/while

https://docs.mql4.com/ru/series/iBarShift

私ならこうする

if (flag_NewBar) // пересчитываем только во время прихода первого тика
 for(i=i_max;i>=0;i--) // Цикл по непосчитанным барам
    mas_MA[i]=NormalizeDouble(iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,
                                                             iBarShift(g_ext_smb,g_ext_TameFrame,Time[i],false)),Digits);
if (flag_NewBar==true) // пересчитываем только во время прихода первого тика
while(i>=0){ // Цикл по непосчитанным барам
mas_MA[i]=NormalizeDouble(iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i),Digits);
i--; 
} 
 
オブジェクトを描画するために使用できるゼロより小さいeibarはいくつですか? 最小値は?
 
costy_:

ステップバイステップで、定数にオーバーシュート始値(振り子が価格より高いとして)を取るストップを変更し、エラーがどこにあるかを実質的に識別することができます。

ヘルプより「保留中の注文の開始価格が間違っている場合、エラー 130(ERR_INVALID_STOPS)が発生します」。

はい、UZH :)確かに、ペンディングの始値が現在値に近いというのはエラーになります。修正し、動作するようにしました。ありがとうございました

 
eddy:
オブジェクトの描画に使用できるeibarshiftは0よりいくつ小さいのでしょうか? 最小値は?

ebarshiftは 時間でバーを検索しています(何も動作しません)。

ターミナルでは、最後のバーは0であり、時間はバーにリンクされている、すなわち、文字列を介して未来にこの方法のみ

ObjectCreate("ff",OBJ_VLINE,0,StrToTime("2010.12.13 20:00"),0); //