Мне трудно поверить, что нулевое деление генерируется размещенным кодом.
DomGilberto скомпилируйте этот скрипт и прикрепите его к графику, который, по вашему мнению, возвращает нулевой размер тика.
int start()
{
//----int i = Bars-1;
int cnt;
int tscnt = 0;
int tvcnt = 0;
double ts = MarketInfo(Symbol(), MODE_TICKSIZE);
double tv = MarketInfo(Symbol(), MODE_TICKVALUE);
while(i >=0)
{if(ts < 0.00001) tscnt++;
if(tv < 0.00001) tvcnt++;
i--;
}
Alert("TickSize returned an erroneous value ",tscnt," times.");
Alert("TickValue returned an erroneous value ",tvcnt," times.");
//----return(0);
}
Я надеюсь, что это видео, которое я сделал (40 секунд или около того), иллюстрирует то, о чем я говорю (так как я не уверен, что объясняю понятно или нет).
Вы увидите, что в первой части, когда я бросаю скрипт на живой график (реальный счет), значение тика и размер тика возвращают "0" на этом "условном счете", который я иллюстрирую в окне лотов (единиц).
Вторая часть - с тем же брокером, но на основе лота, и на этот раз он возвращает значение тика и размер тика. Опять же, я иллюстрирую, что вы торгуете, используя лоты.....
Что касается тестера стратегий, я понятия не имею, почему он работает, а иногда нет. Счет был подключен, пока я запускал обратные тесты (на демо условном счете (единицы)).
Мой следующий вопрос: если это типичный ответ, который я получаю от условного счета, можете ли вы предложить, как мне исправить расчет размера позиции в таких обстоятельствах? Он прекрасно работает для лотового фида... Надеюсь, это объясняет немного лучше?
Если вы используете другой код в вашем "тестовом" коде, то что это доказывает?
Вы знаете, что TICKVALUE возвращает текущее значение с настоящего момента ... даже во время выполнения теста стратегии? Поэтому для любой пары, где базовая валюта не является валютой депозита, это будет неверно, и ваши расчеты лота будут неверными ....
В вашем видео вы используете GBPUSD в первом случае, а затем GBPJPY во втором.
Я думаю, что если бы вы прикрепили свой скрипт к графику GBPUSD с нормальным лотом, вы бы получили значение tickvalue, но ticksize также был бы нулевым.
Это происходит потому, что в оповещениях вашего скрипта используются двойные значения, и поэтому 0.00001 будет выведено как 0.
Вот видео для "Gumrai" и "SDC", подтверждающее то, что вы оба просите меня сделать. Я обозначил скрипты вашими псевдонимами MQL4, которые, очевидно, соответствуют вашему коду, который вы разместили здесь. Видео: http://screencast.com/t/kglCd2hCae
Брокер и соответствующий фид не были изменены во время паузы. Это тоже условный счет фида (единицы).
@RaptorUK: Да, я знал, что TICKVALUE возвращает текущее значение. Я думаю, что ваша вторая часть, глядя на это сейчас, вроде как логична. Я запутался, как я могу использовать tickvalue как часть моего условного счета, чтобы убедиться, что размер позиции правильный...?
Вот видео для "Gumrai" и "SDC", подтверждающее то, что вы оба просите меня сделать. Я обозначил скрипты вашими псевдонимами MQL4, которые, очевидно, соответствуют вашему коду, который вы разместили здесь. Видео: http://screencast.com/t/kglCd2hCae
Брокер и соответствующий фид не были изменены во время паузы. Это тоже условный счет фида (единицы).
@RaptorUK: Да, я знал, что TICKVALUE возвращает текущее значение. Я думаю, что ваша вторая часть, глядя на это сейчас, вроде как логична. Я запутался в том, как я могу использовать tickvalue как часть моего условного фид-счета, чтобы убедиться, что размер позиции правильный...?
Эти видео - боль, они слишком большие для моего экрана.
Почему бы просто не опубликовать код скрипта и результат оповещения.
Я не знаю, что вы вставили в скрипт, который должен был быть моим предложенным кодом, но это никак не может привести к "08".
@RaptorUK: Да, я знал, что TICKVALUE возвращает текущее значение сейчас. Я думаю, что ваша вторая часть, если смотреть на это сейчас, вроде как логична. Я запутался в том, как я могу использовать tickvalue как часть моего условного счета, чтобы убедиться, что размер позиции правильный...?
Сначала вы должны подтвердить, что TICKVALUE действительно возвращает нулевой результат, чего вы еще не сделали.
Ок, новое обновление, я играл с ним, повторяя точное место, где происходит деление нуля.
В этой области кода я вывел формулу, чтобы разложить математику - Где это происходит, это на отложенном ордере BUY... но эта часть кода "pips_to_ssl" - это pips to SELL stop loss.... Который НЕ используется для отложенного ордера со стопом на покупку.....
double loss_for_1_lot1 = pips_to_ssl/ ts * tv ;
if( loss_for_1_lot1 == 0.0 )Print(" ERROR - loss_for_1_lot1 = 0.0 || The formula for this is: ", pips_to_ssl,"/",ts,"*",tv);
2013.10.0211:57:192001.02.1216:00 Trend Fishing - V1 - Notional Lots USDJPYnb,H1: ERROR - loss_for_1_lot1 = 0.0 || The formula forthisis: 0/0.001*0.0001
double pips_to_ssl=SellStopPrice-sellPrice;
if(pips_to_ssl == 0)Print(" ERROR - pips_to_ssl = 0 || The formula for this is: ", SellStopPrice,"-",sellPrice);
2013.10.02 12:08:01 2001.02.12 16:00 Trend Fishing - V1 - Notional Lots USDJPYnb,H1: ERROR - pips_to_ssl = 0 || The formula for this is: 117.249-117.249
DomGilberto: Ок, новое обновление, я поигрался с повторением точного места, где происходит деление на ноль.
В этой области моего кода я вывел формулу, чтобы разложить математику - Где это происходит, это на отложенном ордере на покупку... но эта часть кода "pips_to_ssl" - это пипсы для стоп-лосса на продажу.... Который НЕ используется для отложенного ордера со стопом на покупку.....
Я отсылаю вас к моему предыдущему сообщению
"Обратите внимание, что
double loss_for_1_lot = pips_to_bsl/ ts * tv ; //<<<<<<<<<<<<<<<<<<<<<<<<<<< This is giving me a "0" randomly sometimes?
также приведет к нулю, если pips_to_bsl равен нулю. Возможно ли это?"
double loss_for_1_lot = pips_to_bsl/ ts * tv ;Это НЕ tv, которое приводит к div 0. Это может быть только ts. На 5-значном брокере ts может вывести ноль (4 цифры).
Мне кажется, что вы никогда не открывали эту пару, чтобы получить информацию о рынке от своего брокера, прежде чем загружать историю откуда-то еще.
Мне трудно поверить, что нулевое деление генерируется размещенным кодом.
DomGilberto скомпилируйте этот скрипт и прикрепите его к графику, который, по вашему мнению, возвращает нулевой размер тика.
Я надеюсь, что это видео, которое я сделал (40 секунд или около того), иллюстрирует то, о чем я говорю (так как я не уверен, что объясняю понятно или нет).
Видео: http://screencast.com/t/uMHY5DpM
Вы увидите, что в первой части, когда я бросаю скрипт на живой график (реальный счет), значение тика и размер тика возвращают "0" на этом "условном счете", который я иллюстрирую в окне лотов (единиц).
Вторая часть - с тем же брокером, но на основе лота, и на этот раз он возвращает значение тика и размер тика. Опять же, я иллюстрирую, что вы торгуете, используя лоты.....
Что касается тестера стратегий, я понятия не имею, почему он работает, а иногда нет. Счет был подключен, пока я запускал обратные тесты (на демо условном счете (единицы)).
Мой следующий вопрос: если это типичный ответ, который я получаю от условного счета, можете ли вы предложить, как мне исправить расчет размера позиции в таких обстоятельствах? Он прекрасно работает для лотового фида... Надеюсь, это объясняет немного лучше?
Если вы используете другой код в вашем "тестовом" коде, то что это доказывает?
Вы знаете, что TICKVALUE возвращает текущее значение с настоящего момента ... даже во время выполнения теста стратегии? Поэтому для любой пары, где базовая валюта не является валютой депозита, это будет неверно, и ваши расчеты лота будут неверными ....
В вашем видео вы используете GBPUSD в первом случае, а затем GBPJPY во втором.
Я думаю, что если бы вы прикрепили свой скрипт к графику GBPUSD с нормальным лотом, вы бы получили значение tickvalue, но ticksize также был бы нулевым.
Это происходит потому, что в оповещениях вашего скрипта используются двойные значения, и поэтому 0.00001 будет выведено как 0.
Вместо этогоиспользуйте DoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE),8).
Итак, во-первых, спасибо всем за помощь.
Вот видео для "Gumrai" и "SDC", подтверждающее то, что вы оба просите меня сделать. Я обозначил скрипты вашими псевдонимами MQL4, которые, очевидно, соответствуют вашему коду, который вы разместили здесь. Видео: http://screencast.com/t/kglCd2hCae
Брокер и соответствующий фид не были изменены во время паузы. Это тоже условный счет фида (единицы).
@RaptorUK: Да, я знал, что TICKVALUE возвращает текущее значение. Я думаю, что ваша вторая часть, глядя на это сейчас, вроде как логична. Я запутался, как я могу использовать tickvalue как часть моего условного счета, чтобы убедиться, что размер позиции правильный...?
Итак, во-первых, спасибо всем за помощь.
Вот видео для "Gumrai" и "SDC", подтверждающее то, что вы оба просите меня сделать. Я обозначил скрипты вашими псевдонимами MQL4, которые, очевидно, соответствуют вашему коду, который вы разместили здесь. Видео: http://screencast.com/t/kglCd2hCae
Брокер и соответствующий фид не были изменены во время паузы. Это тоже условный счет фида (единицы).
@RaptorUK: Да, я знал, что TICKVALUE возвращает текущее значение. Я думаю, что ваша вторая часть, глядя на это сейчас, вроде как логична. Я запутался в том, как я могу использовать tickvalue как часть моего условного фид-счета, чтобы убедиться, что размер позиции правильный...?
Эти видео - боль, они слишком большие для моего экрана.
Почему бы просто не опубликовать код скрипта и результат оповещения.
Я не знаю, что вы вставили в скрипт, который должен был быть моим предложенным кодом, но это никак не может привести к "08".
Используйте
@RaptorUK: Да, я знал, что TICKVALUE возвращает текущее значение сейчас. Я думаю, что ваша вторая часть, если смотреть на это сейчас, вроде как логична. Я запутался в том, как я могу использовать tickvalue как часть моего условного счета, чтобы убедиться, что размер позиции правильный...?
Эти видео - боль, они слишком большие для моего экрана.
Почему бы просто не опубликовать код скрипта и результат оповещения.
Я не знаю, что вы вставили в скрипт, который должен был быть моим предложенным кодом, но это никак не может привести к "08".
Используйте
Извините - теперь я понял, что забыл поставить "DoubleToStr", моя вина!!!
TickSize = 0.00100000
TickValue = 0.00001026
(Введено на условном фиде GBPJPY)
@SDC Я просто скопировал ваш код отсюда и поместил его в новый скрипт. Это то, что было возвращено.
В этой области кода я вывел формулу, чтобы разложить математику - Где это происходит, это на отложенном ордере BUY... но эта часть кода "pips_to_ssl" - это pips to SELL stop loss.... Который НЕ используется для отложенного ордера со стопом на покупку.....
double pips_to_ssl=SellStopPrice-sellPrice; if(pips_to_ssl == 0)Print(" ERROR - pips_to_ssl = 0 || The formula for this is: ", SellStopPrice,"-",sellPrice); 2013.10.02 12:08:01 2001.02.12 16:00 Trend Fishing - V1 - Notional Lots USDJPYnb,H1: ERROR - pips_to_ssl = 0 || The formula for this is: 117.249-117.249Ок, новое обновление, я поигрался с повторением точного места, где происходит деление на ноль.
В этой области моего кода я вывел формулу, чтобы разложить математику - Где это происходит, это на отложенном ордере на покупку... но эта часть кода "pips_to_ssl" - это пипсы для стоп-лосса на продажу.... Который НЕ используется для отложенного ордера со стопом на покупку.....
Я отсылаю вас к моему предыдущему сообщению
"Обратите внимание, что
также приведет к нулю, если pips_to_bsl равен нулю. Возможно ли это?"
bsl или ssl, та же кодировка.