前のティックの値 - ページ 4 1234 新しいコメント rdone 2018.09.26 21:14 #31 Nicholiさん、より合理的なコードをありがとうございました。いくつかの実験の後、ask_diff を float として宣言すると、正しい桁数の差分が得られますが、型変換によるデータ損失の可能性に関するコンパイルエラーが発生することがわかりました。差分の精度が非常に小さいか、コンパイル時の警告が出るかのどちらかを選択しなければならないようです。後者の方が取引上の判断に適していると思いますが、ask_diffの小数点以下桁数を最大5桁にする解決策をお持ちの方はいらっしゃいますか? nicholish en 2018.09.26 22:30 #32 rdone: より合理的なコードを提供してくれたNicholiに感謝します。いくつかの実験の後、ask_diff を float として宣言すると、正しい桁数の差分が得られますが、型変換によるデータ損失の可能性に関するコンパイルエラーが発生することがわかりました。差分の精度が非常に小さいか、コンパイル時の警告が出るかのどちらかを選択しなければならないようです。後者の方が取引上の判断に適していると思いますが、ask_diffの小数点以下桁数を最大5桁にする解決策をお持ちの方はいらっしゃいますか?のask_diffはint型にして、以下のような感じにします。 int diff = int(round((current.ask - last.ask) / _Point)); rdone 2018.09.26 22:40 #33 NormalizeDoubleとDoubleToStringを発見したんだ。ちょっと、初日なのに...。 rdone 2018.09.28 06:59 #34 rdone: NormalizeDoubleとDoubleToStringを発見したんだ。おいおい、初日からこれかよ...。 私の目標は、現在のAskと前のAskの差を決定し(パート1)、それらの差の実行中の合計を保持することです(パート2)。パート1は機能しますが、パート2は以前のAskの金額を返すだけです。私は間違っている場所を参照してください、そして、いくつかのコース修正を提供できる人はいますか?double ask_curr; double ask_prev; double ask_diff; double diff_ask; MqlTick tick_curr, tick_prev; void OnTick() { if(SymbolInfoTick(Symbol(),tick_curr)) { /* Part 1 */ ask_curr = tick_curr.ask; ask_prev = tick_prev.ask; ask_diff = ask_curr - ask_prev; Print(DoubleToString(ask_diff,5)); /* Part 2 */ diff_ask = diff_ask + ask_diff; Print(DoubleToString(diff_ask,5)); tick_prev = tick_curr; } else Print("SymbolInfoTick() failed, error = ",GetLastError()); } rdone 2018.09.28 14:54 #35 よくあることですが、コードは私が望んでいることではなく、想定していることを行っていました。このロジックはtick_prevが常にpopulatedであることを要求していますが、最初のティックではtrueではありません。私は、tick_prev が最初のティックでポピュレートされることを必要としないロジックに興味があるのですが、それ以外ではこれは動作します。 rdone 2018.09.28 14:55 #36 rdone: よくあることですが、コードは私が望んでいることではなく、想定していることを行っていました。このロジックはtick_prevが常にpopulatedであることを要求していますが、最初のティックではtrueではありません。私は、tick_prevが最初のティックでポピュレートされることを必要としないロジックに興味がありますが、それ以外はこれで動作します。 そして今、コードで。double ask_curr; double ask_prev; double ask_diff; double diff_ask; int notfirst; MqlTick tick_curr, tick_prev; void OnTick() { if(SymbolInfoTick(Symbol(),tick_curr)) { if (notfirst > 0) { /* Part 1 */ ask_curr = tick_curr.ask; ask_prev = tick_prev.ask; ask_diff = ask_curr - ask_prev; Print(DoubleToString(ask_diff,5)); /* Part 2 */ diff_ask = diff_ask + ask_diff; Print(DoubleToString(diff_ask,5)); } tick_prev = tick_curr; notfirst = 1; } else Print("SymbolInfoTick() failed, error = ",GetLastError()); } Ernst Van Der Merwe 2018.09.28 15:53 #37 rdone: よくあることですが、コードは私が望んでいることではなく、想定していることを行っていました。このロジックはtick_prevが常にpopulatedであることを要求していますが、最初のティックではtrueではありません。私は、最初のティックでtick_prevがpopulatedであることを必要としないロジックに興味があるのですが、それ以外はこれで動作します。double diff_ask=0; MqlTick tick_curr, tick_prev={0}; void OnTick() { if(SymbolInfoTick(Symbol(),tick_curr)) { /* Part 1 */ diff_ask += tick_prev.ask!=0.0?(tick_curr.ask-tick_prev.ask):0.0; Print(DoubleToString(diff_ask,5)); /* Part 2 */ //diff_ask = diff_ask + ask_diff; //Print(DoubleToString(diff_ask,5)); tick_prev = tick_curr; } else Print("SymbolInfoTick() failed, error = ",GetLastError()); } rdone 2018.09.28 23:58 #38 Ernst Van Der Merwe: これは私が目指しているコーディングのレベルです。エルンストさん、ありがとうございました。diff_ask += tick_prev.ask!=0.0?(tick_curr.ask-tick_prev.ask):0.0; nicholish en 2018.09.30 19:16 #39 rdone: これは、私が目指しているコーディングのレベルです。Ernstさん、ありがとうございました。2倍が等しくなることはほとんどないので、点差を2倍として格納することはできません。整数値として保存したいのです。例えば、(1.00001 - 1.00000) / 0.00001 = 1 ポイントとなります。もし、2つのティックを比較するだけなら、MqlTickの サブクラスを作成して、ポイント差のためのint属性を追加するだけで、コードをよりコンパクトにすることができます。 struct MyTick : public MqlTick{int point_diff;} tick_curr={0}, tick_prev={0}; void OnStart() { tick_prev = tick_curr; SymbolInfoTick(_Symbol, tick_curr); if(tick_prev.ask != 0.0){ tick_curr.point_diff = int(round( (tick_curr.ask - tick_prev.ask) / _Point )); printf("%.5f -> %.5f: %d point diff", tick_prev.ask, tick_curr.ask, tick_curr.point_diff ); } } 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
より合理的なコードを提供してくれたNicholiに感謝します。いくつかの実験の後、ask_diff を float として宣言すると、正しい桁数の差分が得られますが、型変換によるデータ損失の可能性に関するコンパイルエラーが発生することがわかりました。差分の精度が非常に小さいか、コンパイル時の警告が出るかのどちらかを選択しなければならないようです。後者の方が取引上の判断に適していると思いますが、ask_diffの小数点以下桁数を最大5桁にする解決策をお持ちの方はいらっしゃいますか?
のask_diffはint型にして、以下のような感じにします。
NormalizeDoubleとDoubleToStringを発見したんだ。おいおい、初日からこれかよ...。
よくあることですが、コードは私が望んでいることではなく、想定していることを行っていました。このロジックはtick_prevが常にpopulatedであることを要求していますが、最初のティックではtrueではありません。私は、tick_prevが最初のティックでポピュレートされることを必要としないロジックに興味がありますが、それ以外はこれで動作します。
よくあることですが、コードは私が望んでいることではなく、想定していることを行っていました。このロジックはtick_prevが常にpopulatedであることを要求していますが、最初のティックではtrueではありません。私は、最初のティックでtick_prevがpopulatedであることを必要としないロジックに興味があるのですが、それ以外はこれで動作します。
これは、私が目指しているコーディングのレベルです。Ernstさん、ありがとうございました。
2倍が等しくなることはほとんどないので、点差を2倍として格納することはできません。整数値として保存したいのです。例えば、(1.00001 - 1.00000) / 0.00001 = 1 ポイントとなります。もし、2つのティックを比較するだけなら、MqlTickの サブクラスを作成して、ポイント差のためのint属性を追加するだけで、コードをよりコンパクトにすることができます。