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

 
drknn:


1.OKです。Int start()を宣言した。私はいつもゼロを返しています。私もreturn(-1)やreturn(-2)のコマンドをコードで見たことがあります。このコードの正しい選び方は?

2.そこで、EA/インジケータ/スクリプトのstart()をint()型ではなく、他の型で宣言して、端末に何を返すのか、という自然な疑問が湧いてきます。つまり、return()で返された値を端末はどのように扱うのか?

1.正常な機能を取り戻すには、どうしたらよいのでしょうか?

2.通常の関数と同じように、どのような型でも持つことができます。ターミナルは返された値に対して何もしない。無視するのです。

特殊機能

 
Zhunko:

1.正常な機能を取り戻すには、どのように判断したらよいのでしょうか?

2.通常の関数と同じように、どのような型でも持つことができます。ターミナルは返された値に対して何もしません。無視するのです。


1.普通の関数が何を返すべきかを決めるには、メインコードがなぜそのような値を必要とするのかを知る必要がある。例えば、シグナルが出たら買い注文を出すという判断をしたい場合、既に出ている買い注文の数を返す関数を書きます。その数に応じて、コードに組み込まれたロジックに従って判断する。リターンコードにどのようなロジックが埋め込まれているかはわかりません。今日、セマフォの作成に関する記事を見ていたら、リターンコード(-2)に行き当たりました。驚いて、ここで質問。以上です。(https://www.mql5.com/ru/articles/1412- 記事はこちら).

2. 端末は返された値を無視する。そうなんですか?もしそうなら、再び正当な疑問が生じる、なぜEA /指標/スクリプトの作成で、開発者は、テンプレートに正確にintを置く、それはそこに無効を置くことがより合理的であるため - その後端末が何かを無視する必要はありません - 我々は、プロセッサ時間の1タクトを得るのだろうか?int init()、int deinit()、int start()関数から返すWHATに何かロジックがあるのかも?ロシュはすでにどこかで誰かに説明していたと思うのですが、ゼロを返すときと(-1)を返すときの説明を覚えていたのでしょう。私が探していたのは、まさにこの説明だったのです。見つからなくて残念・・・。

追伸

記事の著者は、return(-2)を自分の目的のために使っています。しかし、実際には、start()関数がゼロとは異なる値を返すコードで終了することもあるのです。そして、それを行うのは一人の人間だけではありません。私たちが理解したいのは、まさにこのロジックです。

 

本文中にあるように見えます。

事前定義された関数は、パラメータを持つことができます。ただし、これらの関数をクライアント端末が呼び出した場合、外部からパラメータは渡されず、デフォルト値が使用される。

これは、関数に入るパラメータについてであり、関数が返すパラメータについてではありません。

 
お返事ありがとうございました。
drknn:
これはオーダーカウンターです。まあ、例えば、ある通貨ペアで、あるマジックナンバーの買い注文が市場にあるかどうかをコードで知りたいという場合もあるかもしれませんね。ある場合、例えば、別の買い注文を開くことはできません。だから、オーダーカウンターは判断材料として必要なのです。
 
paladin80:

スタート直後のEAにこんなことを書いていました。

試してみると、役に立つことがあるかもしれません。

ありがとうございます、間違いが見つかりました。記事(上記リンク)にある理由でEAが動かなくなった時、一旦閉じてから再開したのですが、オーダーマスターを123から124に変更するのを忘れてしまい、異なる方向性のEA2つが同じマグを取得してどちらが早くオーダーを開けるか競争し始めたことがあります。最初の注文が先に開かれていた場合、例えばSellやその逆とは違うのです。2番目に更新したEAのマジックを変更した途端、両方とも正常に動作するようになりました。またエラーが発生した場合は、アドバイスを参考にさせていただきます。回答ありがとうございました。
 

この線をどう捉えるか。

返品件数

if(buys>0) return(buys);

else return(-sells);

} ?

 

スクリプトを書く。

int start(){
  Print("Попытка ретурна 136");
  return(136);
}

をチャートに投げて、ログを見る。

2012.07.20 12:04:11 111 NZDUSD,M15: removed
2012.07.20 12:04:11 111 NZDUSD,M15: uninit reason 0
2012.07.20 12:04:11 111 NZDUSD,M15: Попытка ретурна 136
2012.07.20 12:04:11 111 NZDUSD,M15: loaded successfully

(ここで111はスクリプトの名前)。uninit reason 0 " という行が見えますが、どうやらターミナルはゼロを待っていたようです。

同じように(-1)で試してみてください。

int start(){
  Print("Попытка ретурна -1");
  return(-1);
}

結果は同じです。

2012.07.20 12:08:19 111 NZDUSD,M15:削除しました。
2012.07.20 12:08:19 111 NZDUSD,M15: uninit reason 0.
2012.07.20 12:08:19 111 NZDUSD,M15:帰国子女試行-1

2012.07.20 12:08:19 111 NZDUSD,M15:ロード成功

端末はゼロが返ってくるかどうかを気にしているようです。

追伸

一般的に、Webではこんな答えが返ってきました。

return 0 - プログラムがエラーなしで処理を完了した場合。
return 1 - またはそれ以上の数、プログラムはエラーで作業を終了し、さらなる処理のためにエラーコードを返します。

どんなOSでも、どんなプログラムでも必ずエラーコードを返します。

唯一の問題は、このreturnはコードをOSに返すのではなく、端末に返すということです。という疑問が残ります。

 
drknn:

スクリプトを書く。

をチャートに投げて、ログを見る。

(ここで111はスクリプトの名前)。uninit reason 0 " という行が見えますが、どうやらターミナルはゼロを待っていたようです。

同じように(-1)で試してみてください。

結果は同じです。

どうやら端末は0が返ってくるかどうかを気にしているようです。


uninit reasonはExpert Advisorが終了したときの理由コードです。

https://docs.mql4.com/ru/constants/uninit

 
UNINIT REASONは標準的な関数に対するリターンとは関係ありません。EAを書き、「start」から「init」を異なる戻り値で呼び出して見てください。実はhttps://docs.mql4.com/ru/basis/functions/special 先生が完璧に言っているんです。ただ、もう一度よく読み直してみて ください。
 
drknn:


1.通常の関数が返すべき値を正確に決めるには、メインコードがなぜそのような値を必要とするのかを知る必要があります。例えば、シグナルが出たら買い注文を出すという判断をしたい場合、既に出ている買い注文の数を返す関数を書きます。その数に応じて、コードに埋め込まれたロジックに従って判断する。リターンコードにどのようなロジックが埋め込まれているかはわかりません。今日、セマフォの作成に関する記事を見ていたら、リターンコード(-2)に行き当たりました。驚いて、ここで質問。以上です。(https://www.mql5.com/ru/articles/1412- 記事はこちら).

2. 端末は戻り値を無視する。これは正確なのでしょうか?もしそうなら、再び正当な疑問が生じます。EA/インジケータ/スクリプトを作成する際に、なぜ開発者はテンプレートに正確にintを置くのか、それはそこにvoidを置くことがより論理的であるため - それからターミナルは何も無視する必要はありません - 我々はその後プロセッサ時間の1タクト得るのだろうか?int init()、int deinit()、int start()関数から返すWHATに何かロジックがあるのかも?ロシュはすでにどこかで誰かに説明していたと思うのですが、ゼロを返すときと(-1)を返すときの説明を覚えていたのでしょう。私が探していたのは、まさにこの説明だったのです。見つからなくて残念・・・。

追伸

記事の著者は、return(-2)を自分の目的のために使っています。しかし、実際には、start()関数がゼロとは異なる値を返すコードで終了することもあるのです。そして、それを行うのは一人の人間だけではありません。私が理解したいのは、まさにこのロジックです。

1.何も付け加えられない。何でもいいから、返してくれ。

2.ターミナルがそれを無視し、あなたのコードがそれを無視しない、もしそれがそのように構築されているなら。システムコールでは、パラメータも戻り値も無視されます。一目瞭然ですね。この場合、どこに戻るのでしょうか?

パターンの作成は推測するしかない。開発者は、デフォルトのINTから進めたのでしょう。