初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 202

 
Yurij Kozhevnikov:

=

これは、私が置換原理を正しく理解していれば、そうなるようです。

中括弧の後に余分なセミコロンがある。そして、他に何を指しているのかは不明です。

マクロ展開を自動化してどうなるかを簡単に確認する方法がないようなのが残念です。自分でスクリプトを作れれば別ですが。

ありがとうございました。マクロでwhileの後にセミコロンがないのは理由があります。

マクロは良いものですが、善と悪の境界線は、彼らの場合、女性以上に細かいです)))とても、慎重に扱わなければならないのです。そして、そう、私の例では、';'ではなく、まさにelseで、;を削除した後に、マクロにあるifを参照し始めたのです。

私はマクロが得意なので、あなたのようなケースは、もう1年半くらい使うのを諦めています、最適なんですけどね。

inline bool CheckRead(){
   ...
}

if (!CheckRead()) return;
 

ただし、ここにはインラインに関する記述が見当たらない。

C++は知らないし。

 

こんにちは! 助けてください

注文を開いたり変更したりするためのかなり簡単なコードがあります。OrderSend, OrderSelect, OrderModify の各関数は、ループに入れられ、試行錯誤の間にわずかな遅延が発生します。通信エラーなどを最小限にするため

注文が正常に開始され、StopLossの変更に成功し、TakeProfitの変更に成功する、という奇妙なことが起こります。しかし、TPを設定するとStopLossがゼロになってしまう。その理由がわからない。

以下、この部分のコードです。

send = 5; //注文を設定する最大試行回数

tick=0です。

sendschet=0; //トライカウンタ

while(!tick && sendschet<=send)

{

tick=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Bid,150,0,0.0,komm,MagNum,0,Yellow)。

sendschet++;

Sleep(1000); //次の試行までの時間を1秒遅らせる

}

select = 5; //注文を選択する最大試行回数

slschet=0; //オーダー選択用トライカウンタ

while(!OrderSelect(tick,SELECT_BY_TICKET) && slschet<=select)

{

slschet++です。

Sleep(500); //次の試行まで0.5秒待つ

}

if(slschet<select) //試行回数が最大値より少ない場合、注文の選択が成功したことを意味します。

{

modify = 5; //注文を変更する最大試行回数

mdschet=0です。

while(!OrderModify(tick,OrderOpenPrice(),NormalizeDouble(SL,Digits),OrderTakeProfit(),0,Yellow)

&& mdschet<=modify)

{

mdschet++です。

Sleep(500); //次の試行まで0.5秒待つ

}

*ここではすべてうまくいっています。

mdschet=0; //TPを変更する前にカウンタをリセットする。

while(!OrderModify(tick,OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(TP,Digits),0,Yellow)

&& mdschet<=modify)

{

mdschet++です。

Sleep(500)です。

}

}

*TPは正常に設定されているが、SLはすでに0.0に等しいので、OrderStopLoss()は0.0に等しいことが判明している。

注文の選び方は変わっていないのですが。

SLとTPを設定する間にもう一度OrderSelectを追加すると、すべてがうまくいくようです。しかし、それは論理的に矛盾している。

この度は、ご協力いただきありがとうございました。

 

こんにちは。

動的配列の サイズを変更する場合の対処法を教えてください。

例えば、私が配列を設定するとします。

int DB[][8];

そして、ループ内の最初のサブルーチンで、おそらく数回(これについては質問はありません -- 今のところ意図したとおりに動作しています)。

ushort i = 0;
ArrayResize(DB,i+1);

次のサブルーチンでは、ループ内の最初の次元に要素を追加することにします。事前に何本かわからない。あらかじめ次元を宣言する場合よりも遅くなるのはわかる。でも、年間500枚までの追加では、差はつかないと思います。

問題は、このサブルーチンで、既存の配列のサイズを調べるにはどうしたらいいかということです。それを基本サイズとして、新たに1つの値を追加すること。

ArraySize()をとって8で割ること?それとも、もっと私に合った他の機能があるのでしょうか?

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

 
Oleg_Ko:

こんにちは。

動的配列の サイズを変更する場合の対処法を教えてください。

例えば、私が配列を設定するとします。

そして、ループ内の最初のサブルーチンで、おそらく数回(これについては質問はありません -- 今のところ意図したとおりに動作しています)。

次のサブルーチンでは、ループ内の最初の次元に要素を追加することにします。事前に何本かわからない。あらかじめ次元を宣言する場合よりも遅くなるのはわかる。でも、年間500枚までの追加では、差はつかないと思います。

問題は、このサブルーチンで、既存の配列のサイズを調べるにはどうしたらいいかということです。それを基本サイズとして、新たに1つの値を追加すること。

ArraySize()をとって8で割ること?それとも、もっと私に合った他の機能があるのでしょうか?

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

ArrayRange()

Документация по MQL5: Операции с массивами / ArrayRange
Документация по MQL5: Операции с массивами / ArrayRange
  • www.mql5.com
Операции с массивами / ArrayRange - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

ArrayRange()

アルテム ありがとうございます。
 

こんにちは。

MT4での取引は長い間していなかったのですが、またやってみようと思いました。以前は添付のスクリプトを使用していましたが、現在では実行できません。

ファイル:
RiskAdvisor.mq4  12 kb
 
Nauris Zukas:

こんにちは。
任意の時間帯の配列の要素 数をすぐにCopyHighで知る方法はないでしょうか?

自分で答える、もしかしたら誰かが検索エンジンでこの質問に行き当たるかもしれない。

SeriesInfoInteger(symbol_name,timeframe,SERIES_BARS_COUNT);
 
Nauris Zukas:

自分で答える、もしかしたら誰かが検索エンジンでこの質問に行き当たるかもしれない。

Bars()、iBars()も。
 
Artyom Trishkin:
Bars()、iBars()も。

Bars()では、どの時間 帯の配列要素 数も調べることはできず、現在のグラフのみです。