Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 858

 

Добрый день.

Индикатор в окне показывает до 5 знака после запятой.

При использовании его в советнике через iCustom(Symbol(), PERIOD_M1, "MACD",12, 26, SignalSMA, 0, 0) выводит значение до 4 знака (установлено командой Print).

Как получить 5-ть знаков в сове?

 
Печатай через функцию DoubleToString и получишь желаемые 5 знаков. А если захочешь то и 8.
 
AlexeyVik:
Печатай через функцию DoubleToString и получишь желаемые 5 знаков. А если захочешь то и 8.
Т. е. вычисления по индикатору в советнике происходят по 5-ти знаку, а до 4-го срезает Print при отображении в Журнале?
 
Craft:
Т. е. вычисления по индикатору в советнике происходят по 5-ти знаку, а до 4-го срезает Print при отображении в Журнале?

 Результат вычислений может быть до 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 имеет значение (1-го буфера) в индикаторе до 5-го знака после запятой, а Print в журнале выдаёт значение до 4-го знака, что не приемлемо.

Как решить эту проблему?

 
Craft:

В том то и дело, что ничего больше нет (нормализаций и т. д.):

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

Print ("g_macd=",g_macd);

g_MACD имеет значение (1-го буфера) в индикаторе до 5-го знака после запятой, а 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 знаками после запятой, а для советника выдаёт аж 13 и даже 14.

 
Pokrov:

Добрый день! Посмотрите пожалуйста код ниже, создание объекта "Стрелка" на сигнале, в тестере стрелки не рисует,хотя по журналу проходят, и еще в журнале при запуске в тестере пишет ошибку  TestGenerator: unmatched data error (volume limit 412 at 2014.10.13 17:10 exceeded),

и во время тестирования выдает ошибку "Проверка стрелки USDJPYm,M5: Ошибка создания объекта: 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:

Спасибо, Алексей! Помогло, теперь стрелки появились и стали двигаться от сигнала к сигналу по точкам, а как мне сделать,что бы на каждом сигнале стрелки появлялись и оставались на своих местах,

чтобы можно было потом проанализировать срабатывание сигнала на графике?   

Перестать двигать и рисовать новые.
Причина обращения: