どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 858

 

こんにちは。

ウィンドウ内のインジケーターは、小数点以下5桁まで表示されます。

iCustom(Symbol(),PERIOD_M1, "MACD",12, 26, SignalSMA, 0, 0) を通じてExpert Advisorで使用すると、小数点以下4桁まで(Printコマンドで設定)が表示されます。

基板に5桁の数字を入れるにはどうしたらよいですか?

 
DoubleToString 関数を使って印刷すれば、希望の5桁の数字が得られます。希望すれば、8文字も可能です。
 
AlexeyVik:
DoubleToString 関数を使って印刷すれば、希望の5桁の数字が得られます。なんなら8でもいい。
つまり、Expert Advisorのインジケータ計算は5桁で行われ、PrintはJournalに表示される際に4桁目をカットしているのですね。
 
Craft:
つまり、Expert Advisorのインジケータ計算は小数点以下5桁で行われ、PrintはJournalに表示する際に結果を小数点以下4桁にカットするのでしょうか。

計算結果は、正規化されていない場合、小数点以下16桁まで可能です。

Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна.
Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно указанном формате необходимо использовать функцию PrintFormat(). 

Printで 直接計算した出力はカットされません。コードの中に何か別のもの、例えば正規化などがあるのです。




 

それが、それ以外のもの(正規化など)がないんです。

double g_macd=iCustom(Symbol(),PERIOD_M1, "g_MACD",12, 26, SignalSMA, 1, 0);

Print ("g_macd=",g_macd);

g_MACDは、インジケータでは小数点以下5桁までの値(1番目のバッファの)が、ログのPrintでは小数点以下4桁までの値になっており、許容できない。

この問題を解決するにはどうすればいいのか。

 
Craft:

それが、それ以外のもの(正規化など)がないんです。

double g_macd=iCustom(Symbol(), PERIOD_M1, "g_MACD",12, 26, SignalSMA, 1, 0);

Print ("g_macd=",g_macd);

g_MACDは、インジケータでは小数点以下5桁までの値(1番目のバッファの)が、ログのPrintでは小数点以下4桁までの値になっており、許容できない。

この問題を解決するにはどうすればいいのか。

コードを見てください、問題はそこにあるのです。

試しに、WPRコールで簡単なスクリプトを実行し、インジケータコールの 結果を出力してみました。

 double wpr1=iWPR(NULL,0,1440,1);
 Print("WPR=",wpr1);

****2015.03.08 01:12:15	2015.03.06 22:59 **** EURUSD,H1: WPR=-99.1902834008098


インジケーター自体はご存知の通り、ウィンドウに小数点以下4桁の値が表示されますが、Expert Advisorの場合は13桁、14桁まで表示されます。

 
Pokrov:

こんにちは!以下のコードを見てください、信号上の "矢印 "オブジェクトの作成は、矢印は、ログが通過し、またテスターの書き込みで起動時にログでエラーTestGenerator:一致しないデータエラー(ボリュームリミット412 2014.10.13 17時10分を超えた)されていない。

そして、テスト中にエラー "Checking USDJPYm,M5 arrow: Error in object creation: code #4200" が発生します。しかし、プログラムが最初にオブジェクトを作成したことを発見し、それを削除した後に再度作成するので、これは正常だと思われます。総じて、質問に対するコメントを頂ければ幸いです。

書いてあることを鵜呑みにして判断しないでください。


みなさん、矢面に立って助けてください!!!!

//+------------------------------------------------------------------+
//| SignalOpenOrderBuy SendMail                                      |
//+------------------------------------------------------------------+
if (PLO0>S0 && PLO1<=S1 && PLO2<S2 && Time[0] > SignalTime)
{
SignalTime = TimeCurrent();
bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
Print("Стрелка Buy установлена");
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
ResetLastError();
ObjectDelete(0,"ArrowBay");
RefreshRates();
SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
else
Print("Стрелка Buy установлена");
}
 
Pokrov:

みなさん、矢面に立って助けてください!!!!

このラインを把握する。

bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);

矢印が描かれているところをご覧ください。

 
AlexeyVik:

この行を把握する

矢印が描かれている場所をご覧ください。

今、矢印が表示され、ポイントに従ってシグナルからシグナルに移動しています。

そうすれば、チャート上で信号のトリガーを分析することができるのですね。

 
Pokrov:

Alexeyさん、ありがとうございます!これで、矢印が表示され、信号から信号へポイント移動するようになりました。しかし、どうすれば、各信号に矢印を表示し、その場所に留まるようにできるのでしょうか?

そうすれば、チャート上で信号のトリガーを分析することができるのですね。

動きを止めて、新しいものを描く。