if (!GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0)) {
// здесь код обработки, если функция вернула false// false она вернёт в случае, если переменная GL_Var не была равна 1.0 во время вызова этой функции
// или если вообще ещё нет глобальной переменной GL_Var
}
左の括弧をすべて数え、次に右の括弧をすべて数え、数量を比較するか、エラーを見つけるまで関数を一つずつコメントします。テイストやカラー(ソースコードデザイン)は人それぞれです。
4つの開き括弧と4つの閉じ括弧がありますね。しかし、コメントがどのように役立つのか、私にはよくわからない。
まずカスタム関数をコメントアウトし、次にループや論理構成などをコメントアウトすることができます。順次切り落としでブラケットにマッチしたものを見つけることができると断言できます。それとも、どこかに「;」も入れ忘れたのか...。
IFとFORを間違えてませんか?
すみません、一度で気づかなかったです。
この断片と比較してみてください。あくまでもバリエーションです。
6番目の注文がローソク足で開かなかった理由と、開かせるためにどうすればいいかを説明できる人はいますか?
ログです。
2011.11.04 19:42:21 1999.11.04 20:00 RLB_FLAT GBPUSD,H4: open #7 sell stop 0.10 GBPUSD at 1.62233 sl: 1.64443 tp: 1.57089 ok
2011.11.04 19:42:21 1999.11.04 20:00 Tester: #6 期限切れで削除さ れました。
2011.11.04 19:42:10 1999.11.04 12:00 RLB_FLAT GBPUSD,H4: 開く #6 sell stop 0.10 GBPUSD at 1.63373 sl: 1.64570 tp: 1.62652 ok.
2011.11.04 19:42:09 1999.11.04 08:00 Tester: #5期限切れで削除さ れました。
2011.11.04 19:42:06 1999.11.04 00:00 RLB_FLAT GBPUSD,H4: オープン #5 セルストップ 0.10 GBPUSD at 1.63622 sl: 1.64702 tp: 1.63411 ok
2011.11.04 19:42:00 1999.11.02 04:00 Tester: #4 期限切れで削除。
2011.11.04 19:41:53 1999.11.01 20:00 RLB_FLAT GBPUSD,H4: オープン #4 セルストップ 0.10 GBPUSD at 1.63365 sl: 1.64917 tp: 1.61097 ok
4番目、5番目、6番目の注文は期限切れのため削除されました。
ライフタイムを長くするか、0(ゼロ)にするか、参照してください。 オーダーモディファイ()
第4回、第5回、第6回の繰延べは有効期限が切れたため削除されました。
有効期限を増やすか、0(ゼロ)に設定するかは、OrderModify() を参照してください。 オーダーモディファイ()
混乱するのは、6番目の注文が期限切れになる前(20:00に期限切れ)、16:00にローソク足が下降していたことです。これは写真を見ていただければわかると思います。
1.この関数は、履歴の中で最も高いティッカーを持つ注文、つまり最後に決済された注文を見つけます(もちろん、例外的なケースを除いて、決済時間が最大のオプションが望ましいです)。
2.この条件では, 最初の注文は指定された TP/SL で発注され,2番目の注文のみ新しい TP/SL で発注することができます.つまり,この関数は最初の取引が 0 の場合のみ 0 を返すことができますが,履歴に決済済み注文がない場合は 0 を返しません.
最後にもうひとつ。あなたのバリアントでは、関数内でjと別のSELECTを使用することは冗長です。
で十分です。
1.チケットのナンバリングについては、ブローカー(またはクライアントの ブローカー)を100%信頼できるのでしょうか?時間の方がまだ安定した値です。ここでは、彼は履歴を調整することによって手動で時間を変更することができるだけです。IMHO - 時間を使う方が良い。
2.もし、クライアントが ロジックを変更する必要がある場合は、関数を書き直さなければならないかもしれません。
3.を提案していますか?
をループ内で 使用するには?何のために?すでに見つかった最後の注文に対して1回のみ使用可能です。
А...あなたの顧客は 、テストと最適化をしない。なるほど...。
GlobalVariableSetOnCondition() - この関数が何をするのか、わかりやすく説明してもらえますか?ヘルプの記述が非常にわかりにくく、理解できない点があるのですが?
既存のグローバル変数の現在の値が第3パラメータcheck_value の値と等しい場合、新しい値を設定します。変数が存在しない場合は、エラー ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) を生成し、FALSE を返します。この関数は、正常に実行された場合は TRUE を、そうでない場合は FALSE を返します。エラー情報を取得するには、関数GetLastError() を呼び出す必要があります。グローバル変数の現在値がcheck_value と異なる場合、この関数は FALSE を返します。
この関数は、グローバル変数へのアトミックアクセスを可能に するため、同一クライアント端末内の複数のExpert Advisor間で同時通信を行うためのセマフォの作成に 使用することができます。
GlobalVariableSetOnCondition() - この関数が何をするのか、わかりやすく説明してもらえますか?ヘルプの記述が非常にわかりにくく、理解できない点があるのですが?
既存のグローバル変数に新しい値を設定します。変数の現在の値が3番目のパラメータcheck_valueと 等しい場合です。変数が存在しない場合は、エラー ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) を発生し、FALSE を返します。この関数は、正常に実行された場合は TRUE を、そうでない場合は FALSE を返します。エラー情報を取得するには、関数GetLastError() を呼び出す必要があります。グローバル変数の現在値がcheck_value と異なる場合、この関数は FALSE を返します。
この関数は、グローバル変数へのアトミックアクセスを可能に するため、同一クライアント端末内の複数のExpert Advisor間で同時通信を行うためのセマフォの作成に 使用することができます。
グローバル変数GL_Varがあるとします。
現在、値は1.0である。
この変数の値が1.0であるかどうかを確認し、もしそうなら、この変数を2.0に設定する必要があります。
こんな感じでしょうか。
この関数の戻り値を処理するために、if を介して呼び出すことができます。
関数を呼び出す前に、グローバル変数 GL_Var が存在するかどうかを確認することで、 ERR_GLOBAL_VARIABLE_NOT_FOUND のエラーを回避することができます。
小さな幾何学的な 問題を解決するのにお役立てください。座標p1、p2を持つ直線(写真では赤で表示)がある。p2の座標の38.2%であるp3の座標を求める必要がある。を行いました。
if(p2>p1) p3=p2-(p2-p1)*0.382; 図の上側がtrueになります。
if(p1>p2) p3= p2+(p1-p2)*0.382; 下はtrue
これを "if "を使わずに1つの式に書き出す方法はないのでしょうか?
まあ、そういう風に書いてください。
p3=p2-(p2-p1)*0.382
まあ、そういう風に書いてください。
p3=p2-(p2-p1)*0.382
そして、実際に!よろしくお願いします。