アスク! - ページ 54

 

バッファが0に なった場合の解決策

int currentBar=0;

double lowestFG=iCustom(NULL,0, "Forex-Grail Trade Indicator",period,PRICE_CLOSE,0, currentBar);

double highestFG = lowestFG;

for(;currentBar<4; currentBar++) lowestFG=MathMin(lowestFG, iCustom(NULL,0, "Forex-Grail Trade Indicator",period,PRICE_CLOSE,0,currentBar)).for(;currentBar=0; currentBar++);

for(currentBar=0;currentBar<4; currentBar++) highestFG =MathMax(highestFG , iCustom(NULL,0, "Forex-Grail Trade Indicator",period,PRICE_CLOSE,0,currentBar)).FG =MathMax(highestFG ,iCustom(NULL,0, "Forex-Grail Trade Indicator",period,PRICE_CLOSE,0,currentBar));

バッファ#1に対してもう一度やり直す必要があります。

 
iscuba11:
コメント文がグラフに表示する小数点以下の桁数を制限するにはどうすればよいですか? 今は変数の結果が.00347892と表示されていますが、.0035(次の数字に丸められたもの)だけを表示させたいのですが?
ご意見を お聞かせください。 Dave

関数 IndicatorDigits

 

まず最初に、私を助けてくれたすべての人に感謝します。 これで私の新しいEAをテスト用にライン上に置くことができると思います。

小数点以下の桁数についてまだ疑問があります。

コメント文はインジケータではなく、EAから生成されています。 関数 indicatordigitsは、EAではなく、インジケーター本体で使われていると思います。 変数のX位までの単純な四捨五入は使えないものでしょうか。 なぜこんなにも複雑な言語にしてしまったのか。 基本的な言語でも、こんなことはできるはずです

いつもながらありがたいことに、知識や知恵のフィードバックは大歓迎です。 可能であれば助けてください。

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

 

やっと投稿を正しく読みました、Comment(DoubleToStr(doubleVariable, 4))を試してみてください。

 

これで完了です。 あとは微調整とテストです。 みなさんが私を祝福してくれたのですね、ありがとうございます

イエスの名において、平和と愛をみんなに! デイブ牧師
 

もっと助けてください

if(currency_decimal == 2) OpenTriggerLevel = DoubleToStr(OpenTriggerLevel,2);

EAの設定で、ユーザーが4桁から2桁(currency_decimal)を選択すると、EAが自動的にデフォルトのOpenTriggerLevelを小数点以下4桁から2桁に変更するようにしようとしています。 このような変更は、USDJPYのような小数点以下2桁の通貨で行われる必要があります。

明らかに、コンパイラは上記の文の2番目の「=」記号を 好まないようです。

今後ともよろしくお願いいたします。

デイブ
 

MQL4には、ペアの小数点以下の桁数に対応するDigitsという変数があらかじめ定義されています。

DoubleToStr(OpenTriggerLevel, Digits)となります。

このコードは正しいのですが、変数の定義に誤りがあると思われます。

 
asmdev:
MQL4には、ペアの小数点以下の桁数に対応する事前定義された変数Digitsがあります。

DoubleToStr(OpenTriggerLevel, Digits)とします。

コードは正しいのですが、変数の定義に誤りがあるようです。

これを試してみましたが、OpenTriggerLevelは.04に対して.0004と表示されたままです。

if(currency_decimal == 2) DoubleToStr(OpenTriggerLevel,2);

まだ迷っているのでしょうか?

 
iscuba11:
if(currency_decimal == 2) OpenTriggerLevel = DoubleToStr(OpenTriggerLevel,2);[/PHP]

What I am attempting to do is have the EA automatically change the default OpenTriggerLevel from 4 decimal places to 2 when the user selects 2 (currency_decimal) from 4 in the EA setup. Such a change would have to take place on a currency like USDJPY which is 2 decimal places.

Evidently the compiler does not like the second ' = ' sign in the above statement.

With continued appreciation, Thanks in Advance for your input assistance!

Dave

この文の問題は、変数 'OpenTriggerLevel' が 'double' 型であるのに対し、関数が 'string' を返していることです。つまり、このコードは構文的には正しいが、意味的には間違っており、それがコンパイラが文句を言う理由だと私は考えている。

もし、文字列を変数で持ち運びたいのであれば、そのための変数が必要です。そうでなければ、「Comment」引数の中の「DoubleToStr」関数を使って、現在「OpenTriggerLevel」と書いてある箇所を置き換えることができます。この場合、次のように記述することができます。

[PHP]DoubleToStr( OpenTriggerLevel, currency_decimal )

と書けば、'if ...'ステートメントは不要になります。

 

スクリプトで、買い、売り、buystop、sellstop、buyimit、sellstopの合計を取得する方法をご存知の方はいらっしゃいますか? ありがとうございます。