for(int h = OrdersTotal()-1; h >= 0; h--) // Начинаем цикл перебора ордеров
{
if(OrderSelect(h, SELECT_BY_POS)) //Выбираем ордер с индексом h
{
if((cnt_OO >= 2))//Если cnt_OO больше либоравно 2 выполняем блок иначе переходим к Метке 1
{
if((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus))//Если мейджик выбраного ордера совпадает и лотность совпадает с Lots/Prikup - Dplus
//(если переменные типа double необходимо обязательно нормализовать) выполняем блок иначе переходим к Метке 1
{
Nextstep = NextStep;
BaseNext = OrderOpenPrice();
LotsNext = NormalizeDouble(OrderLots()*K,lotDigit);
if(NewPB > 0)
PBcloseON = true;
Alert ("Pospedny Order NEXT ",OrderTicket());
Alert ("Otkritih orderov ",cnt_OO);
break; //Прерываем цикл
}}
//Метка 1
LotsNext = NormalizeDouble(Lots*Prikup,lotDigit);
Alert ("Otkritih orderov NEXT net ");
Alert ("Otkritih orderov ",cnt_OO);
break;// Прерываем цикл
}}
Первая проблема Lots/Prikup - Dplus это необходимо нормализовать почитайте про это внимательно, если переменные типа double то вы с удивлением заметите что 4/2 выдаёт не ожидаемое 2 а 1.9999999999 видимо вы с этой проблемой ещё не сталкивались
Таким образом если у вас if((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus)) будет ложным, а я с большой долей вероятности могу сказать что оно ложно, то даже если у вас cnt_OO больше 1 вы гарантированно придёт на блок после Метка 1. Так что все работает у вас без ошибок проблема в логике обработки данных.
Вторая проблема вы гарантированно обрабатываете исключительно последний в списке ордер зачем тогда было городить цикл for?
Если вы это делаете исключительно для тестера то выбрав последний из списка ордер вы действительно получите нужный ордер и то не всегда. На реальном рынке да ещё если запущено несколько советников вы гарантированно получите совсем не то что ожидаете а цикл у вас гарантированно после первого прохода прерывается по команде break
Первая проблема Lots/Prikup - Dplus это необходимо нормализовать почитайте про это внимательно, если переменные типа double то вы с удивлением заметите что 4/2 выдаёт не ожидаемое 2 а 1.9999999999 видимо вы с этой проблемой ещё не сталкивались
Таким образом если у вас if((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus)) будет ложным, а я с большой долей вероятности могу сказать что оно ложно, то даже если у вас cnt_OO больше 1 вы гарантированно придёт на блок после Метка 1. Так что все работает у вас без ошибок проблема в логике обработки данных.
Вторая проблема вы гарантированно обрабатываете исключительно последний в списке ордер зачем тогда было городить цикл for?
Если вы это делаете исключительно для тестера то выбрав последний из списка ордер вы действительно получите нужный ордер и то не всегда. На реальном рынке да ещё если запущено несколько советников вы гарантированно получите совсем не то что ожидаете а цикл у вас гарантированно после первого прохода прерывается по команде
Vitaly Gorbunov:
Первая проблема Lots/Prikup - Dplus это необходимо нормализовать почитайте про это внимательно, если переменные типа double то вы с удивлением заметите что 4/2 выдаёт не ожидаемое 2 а 1.9999999999 видимо вы с этой проблемой ещё не сталкивались
Таким образом если у вас if((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus)) будет ложным, а я с большой долей вероятности могу сказать что оно ложно, то даже если у вас cnt_OO больше 1 вы гарантированно придёт на блок после Метка 1. Так что все работает у вас без ошибок проблема в логике обработки данных.
Вторая проблема вы гарантированно обрабатываете исключительно последний в списке ордер зачем тогда было городить цикл for?
Если вы это делаете исключительно для тестера то выбрав последний из списка ордер вы действительно получите нужный ордер и то не всегда. На реальном рынке да ещё если запущено несколько советников вы гарантированно получите совсем не то что ожидаете а цикл у вас гарантированно после первого прохода прерывается по команде break
насчет нормализации - спасибо, я не заметил что ее нет. Глаз просто замылился.
насчет цикла for : в архиве присутствуют разные ордера с разными мэйджиками и от разных пар. Я перебираю с конца пока не найду необходимый. Происходит это в тот момент, когда советник не начал работу и в списке не появятся новые нужные мне ордера. Цикл прерывается не по первому проходу, а тогда когда будет найден нужный мне ордер.
Насчет функций Onlinit и OnDeinit надо разобраться как следует. Необходимость их очевидна.
В данной реализации цикл не получается. Я прогнал ваш код в различных вариантах всегда один проход.
И теперь понятно где вы ошиблись!
for(int h = OrdersTotal()-1; h >= 0; h--) // Начинаем цикл перебора ордеров
{
if(OrderSelect(h, SELECT_BY_POS)) //Выбираем ордер с индексом h
{
if((cnt_OO >= 2))//Если cnt_OO больше либоравно 2 выполняем блок иначе переходим к Метке 1
{
if((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus))//Если мейджик выбраного ордера совпадает и лотность совпадает с Lots/Prikup - Dplus//(если переменные типа double необходимо обязательно нормализовать) выполняем блок иначе переходим к команде continue
{
Nextstep = NextStep;
BaseNext = OrderOpenPrice();
LotsNext = NormalizeDouble(OrderLots()*K,lotDigit);
if(NewPB > 0)
PBcloseON = true;
Alert ("Pospedny Order NEXT ",OrderTicket());
Alert ("Otkritih orderov ",cnt_OO);
break; //Прерываем цикл
}
continue; //Вернёмся в цикл за следующим ордером если предыдущий не прошёл проверку
}
//Метка 1
LotsNext = NormalizeDouble(Lots*Prikup,lotDigit);
Alert ("Otkritih orderov NEXT net ");
Alert ("Otkritih orderov ",cnt_OO);
break;// Прерываем цикл
}}
В данной реализации цикл не получается. Я прогнал ваш код в различных вариантах всегда один проход.
И теперь понятно где вы ошиблись!
Максимально всё прокомментировал! Пробуйте!
Спасибо, я понял. Здесь происходит обход ошибки связанной с отсутствием нормализации. При более тщательной проработке алгоритма восстановления Условие &&(OrderLots() <= Lots/Prikup - Dplus) оказалось не нужно.
Спасибо всем за добрые советы
вот результат тестирования. На реале примерно тоже, даже лучше. Заранее предупреждаю - это не мартингейл. Это еще хуже чем вам кажется :=). Просадка 1.3% прибыль 507$
Хороший результат! Будут ещё проблемы обращайтесь, только вот очень сложно из вас тянуть нужную информацию для выявления проблемы. Если хотите можете добавить в друзья что бы не потеряться.
То есть, у вас по итогу получилось зашифровать в МТ, а расшифровать в .php ? Какой способ использовали?
Нет, я же пишу не получилось. Забил я на это дело. Для моей задачи достаточно хэша было. Я отправлял и получал хэш и обратно еще другой хэш в качестве подтверждения.
Так и не получилось расшифровать в PHP. Было бы неплохо если б кто-то смог этот вопрос серьезно осветить. Может быть разработчики или вроде того.
Нет, я же пишу не получилось. Забил я на это дело. Для моей задачи достаточно хэша было. Я отправлял и получал хэш и обратно еще другой хэш в качестве подтверждения.
Так и не получилось расшифровать в PHP. Было бы неплохо если б кто-то смог этот вопрос серьезно осветить. Может быть разработчики или вроде того.
Напишите свою функцию шифрования на пыхе, и перенесите её на mq. Так точно не расшифруют, и будет работать на 100% при любом раскладе.
Первая проблема Lots/Prikup - Dplus это необходимо нормализовать почитайте про это внимательно, если переменные типа double то вы с удивлением заметите что 4/2 выдаёт не ожидаемое 2 а 1.9999999999 видимо вы с этой проблемой ещё не сталкивались
Таким образом если у вас if((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus)) будет ложным, а я с большой долей вероятности могу сказать что оно ложно, то даже если у вас cnt_OO больше 1 вы гарантированно придёт на блок после Метка 1. Так что все работает у вас без ошибок проблема в логике обработки данных.
Вторая проблема вы гарантированно обрабатываете исключительно последний в списке ордер зачем тогда было городить цикл for?
Если вы это делаете исключительно для тестера то выбрав последний из списка ордер вы действительно получите нужный ордер и то не всегда. На реальном рынке да ещё если запущено несколько советников вы гарантированно получите совсем не то что ожидаете а цикл у вас гарантированно после первого прохода прерывается по команде break
Первая проблема Lots/Prikup - Dplus это необходимо нормализовать почитайте про это внимательно, если переменные типа double то вы с удивлением заметите что 4/2 выдаёт не ожидаемое 2 а 1.9999999999 видимо вы с этой проблемой ещё не сталкивались
Таким образом если у вас if((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus)) будет ложным, а я с большой долей вероятности могу сказать что оно ложно, то даже если у вас cnt_OO больше 1 вы гарантированно придёт на блок после Метка 1. Так что все работает у вас без ошибок проблема в логике обработки данных.
Вторая проблема вы гарантированно обрабатываете исключительно последний в списке ордер зачем тогда было городить цикл for?
Если вы это делаете исключительно для тестера то выбрав последний из списка ордер вы действительно получите нужный ордер и то не всегда. На реальном рынке да ещё если запущено несколько советников вы гарантированно получите совсем не то что ожидаете а цикл у вас гарантированно после первого прохода прерывается по команде
Первая проблема Lots/Prikup - Dplus это необходимо нормализовать почитайте про это внимательно, если переменные типа double то вы с удивлением заметите что 4/2 выдаёт не ожидаемое 2 а 1.9999999999 видимо вы с этой проблемой ещё не сталкивались
Таким образом если у вас if((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus)) будет ложным, а я с большой долей вероятности могу сказать что оно ложно, то даже если у вас cnt_OO больше 1 вы гарантированно придёт на блок после Метка 1. Так что все работает у вас без ошибок проблема в логике обработки данных.
Вторая проблема вы гарантированно обрабатываете исключительно последний в списке ордер зачем тогда было городить цикл for?
Если вы это делаете исключительно для тестера то выбрав последний из списка ордер вы действительно получите нужный ордер и то не всегда. На реальном рынке да ещё если запущено несколько советников вы гарантированно получите совсем не то что ожидаете а цикл у вас гарантированно после первого прохода прерывается по команде break
насчет нормализации - спасибо, я не заметил что ее нет. Глаз просто замылился.
насчет цикла for : в архиве присутствуют разные ордера с разными мэйджиками и от разных пар. Я перебираю с конца пока не найду необходимый. Происходит это в тот момент, когда советник не начал работу и в списке не появятся новые нужные мне ордера. Цикл прерывается не по первому проходу, а тогда когда будет найден нужный мне ордер.
Насчет функций Onlinit и OnDeinit надо разобраться как следует. Необходимость их очевидна.
В данной реализации цикл не получается. Я прогнал ваш код в различных вариантах всегда один проход.
И теперь понятно где вы ошиблись!
Максимально всё прокомментировал! Пробуйте!
В данной реализации цикл не получается. Я прогнал ваш код в различных вариантах всегда один проход.
И теперь понятно где вы ошиблись!
Максимально всё прокомментировал! Пробуйте!
Спасибо, я понял. Здесь происходит обход ошибки связанной с отсутствием нормализации. При более тщательной проработке алгоритма восстановления Условие &&(OrderLots() <= Lots/Prikup - Dplus) оказалось не нужно.
Спасибо всем за добрые советы
вот результат тестирования. На реале примерно тоже, даже лучше. Заранее предупреждаю - это не мартингейл. Это еще хуже чем вам кажется :=). Просадка 1.3% прибыль 507$
Если получится, и не жалко поделится результатом - напишите решение задачи
Не получилось (я использовал библиотеку php openssl). Решил задачу по-другому.
Не получилось (я использовал библиотеку php openssl). Решил задачу по-другому.
То есть, у вас по итогу получилось зашифровать в МТ, а расшифровать в .php ? Какой способ использовали?
То есть, у вас по итогу получилось зашифровать в МТ, а расшифровать в .php ? Какой способ использовали?
Нет, я же пишу не получилось. Забил я на это дело. Для моей задачи достаточно хэша было. Я отправлял и получал хэш и обратно еще другой хэш в качестве подтверждения.
Так и не получилось расшифровать в PHP. Было бы неплохо если б кто-то смог этот вопрос серьезно осветить. Может быть разработчики или вроде того.
Нет, я же пишу не получилось. Забил я на это дело. Для моей задачи достаточно хэша было. Я отправлял и получал хэш и обратно еще другой хэш в качестве подтверждения.
Так и не получилось расшифровать в PHP. Было бы неплохо если б кто-то смог этот вопрос серьезно осветить. Может быть разработчики или вроде того.
Напишите свою функцию шифрования на пыхе, и перенесите её на mq. Так точно не расшифруют, и будет работать на 100% при любом раскладе.
Если получится, и не жалко поделится результатом - напишите решение задачи
гуглить "PKCS#7 padding format"