[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 191

 
eddy:

1.37197000の間違いです。

正しい価格は1.37197または1.3719で、どちらのDNSかによって異なります。

NormalizeDouble() を使用して、小数点以下の桁数を設定します。


OrderSend()の価格にNormalizeDouble()を追加、これでエラーなし、ありがとうございます。
 
artmedia70:

これくらい簡単です。

関数そのものは、start()関数の外側か、コード全体の一番最後に配置します。



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

インジケータ起動後の最初のティックでGetTickCountを記憶させる必要があるのですが、以下のコードが動作せず、ターミナルがハングアップしてしまいます。もしかしたら、init()でRefreshRatesが全く動作しないのでは...?

while(true){if(RefreshRates()){ tik=GetTickCount();break; }スリープ(1);} } } { tik=GetTickCount();break; } { tik=GetTickCount()

initでフラグを立てると毎回チェックされてしまうので、initで実装したいのですが。
 
eddy:
init時にフラグを立てると毎回チェックされてしまうので、init時に行いたい。
グローバル変数を 宣言する場合は、値を代入し、起動時にリセットしてください。その場合、最初のティックのみ初期値を持ち、それ以降のティックでは、開始時に割り当てられた値を持つことになります。その後、Expert Advisorの起動時に一度だけ実行されるすべてのアクションを、起動時に転送することができます。
 
eddy:

プログラムによってチャートにインジケータをロードする方法を教えてください。

bool ServiceLoadCustomIndicator(int hwndChart,...);//hwndChart- チャートウィンドウのシステムディスクリプタで、ここにインジケータがロードれます

チャートウィンドウのディスクリプターを知る方法がわからない。

インジケータ起動後の最初のティックでGetTickCountを記憶させるだけなのですが、下記のコードがうまくいかず、ターミナルがハングアップしてしまいます。 もしかしてinit()のRefreshRatesが全く機能していないのでしょうか・・・?

https://docs.mql4.com/ru/windows/WindowHandle
 
granit77:
宣言時にグローバル変数に値を代入し、起動時にリセットする。そうすると、最初のティックでは代入前の元の値のみを持ち、それ以降のティックでは開始時に代入された値を持つことになります。これにより、EA起動時に一度だけ実行される動作が、すべて起動時に引き継がれるようになります。

起動時にこの変数に何かを代入する必要はない。

グローバル変数に刻みを記憶させる別のインジケータを作成し、その値を起動時にメインインジケータに通知することにしました。

Zhunko さん、同じTFとシンボルのウィンドウが複数ある場合はどうするのですか?

 
eddy:

起動時にこの変数に何かを代入する必要はない。

グローバル変数に刻みを記憶させる別のインジケータを作成し、その値を起動時にメインインジケータに通知することにしました。

Zhunko さん、同じタイムフレームとシンボルで複数のウィンドウがある場合はどうするのですか?

ずっと前にチェックした(あなたもできる)最後の1つまたはアクティブなものを返します。
 
Zhunko: 最後の1つまたはアクティブなものを返します。

つまり、どれもアクティブでない場合は、最後の1つを返すのですか?

しかし、そんなことはどうでもよくて、どうせ追加するときは、追加すべきところが常にアクティブになっているのだと思います。

 
eddy:

しかし、そんなことはどうでもよくて、とにかく追加したいところで追加すると必ずアクティブになると思うのですが......。

はい、その通りです。同じチャートウィンドウをZ順に並べてディスクリプターを返す関数があります。ライブラリに入れなかった。でも、あまり役には立たないでしょう。
 
eddy:

起動時にこの変数に何かを代入する必要はない。

刻みをグローバル変数に記憶させるインジケータを別に作り、その値をメインインジケータが起動時に認識するようにすることにした

私が言いたかったのは、こういうことです。
bool FirstStart=true;

int start(){

    if(FirstStart){
      if(RefreshRates()) tik=GetTickCount();
      FirstStart=false;
    } 
}