figurelli: Здравствуйте,FinanceEngineer, возможно, было бы лучше начать проверку проблемы множественных ордеров в вашем оригинальном коде, так как если мы это сделаем, возможно, мы рассмотрим другие критические моменты здесь и не потеряем фокус, что вы думаете об этом?
Здравствуйте, Фирелли
Это мой новый код. Я изменил его после того, как поднял вопрос о множественных ордерах в этой теме.
Пока что этот код работает нормально с несколькими брокерами. BlindMist может попробовать этот код, чтобы посмотреть, сможет ли он избежать проблемы с множественными ордерами у этого брокера.
Это мой новый код. Я изменил его после того, как поднял вопрос о множественных ордерах в этой теме.
Пока что этот код работает нормально с несколькими брокерами. BlindMist может попробовать этот код, чтобы посмотреть, сможет ли он избежать проблемы с множественными ордерами у этого брокера.
Пожалуйста, используйте кнопку SRC при размещении кода.
Код, который вы опубликовали, не может избежать (всех) двойных ордеров, и наоборот, в некоторых случаях он может спровоцировать двойные ордера.
Это мой новый код. Я изменил его после того, как поднял вопрос о множественных ордерах в этой теме.
Пока что этот код работает нормально с несколькими брокерами. BlindMist может попробовать этот код, чтобы посмотреть, сможет ли он избежать проблемы с множественными ордерами у этого брокера.
Привет,FinanceEngineer, обратите внимание, что в вашем первоначальном коде у вас есть Print("OrderSend Code: "...) в if { } и else { }.
Но else { } имеет прерывание, а ваш отладочный код показывает retcode = 10008 (TRADE_RETCODE_PLACED) x 10.
То есть, судя по всему, вы выводили отладочное условие if { } и ваш break никогда не использовался.
if(!OrderSend(request,result) || result.deal==0 )
{
Print("OrderSend Code: ",result.retcode);
if(result.retcode==TRADE_RETCODE_TRADE_DISABLED) break;
if(result.retcode==TRADE_RETCODE_MARKET_CLOSED) break;
if(result.retcode==TRADE_RETCODE_NO_MONEY) break;
if(result.retcode==TRADE_RETCODE_TOO_MANY_REQUESTS) Sleep(5000);
if(result.retcode==TRADE_RETCODE_FROZEN) break;
if(result.retcode==TRADE_RETCODE_CONNECTION) Sleep(15000);
if(result.retcode==TRADE_RETCODE_LIMIT_VOLUME) break;
}
elseif(result.retcode==10009 || result.retcode==10008)
{
Print("OrderSend Code: ",result.retcode);
volume-=result.volume; //If order was successful then reduce volume to 0.0, then the loop will be terminated.if(Type == POSITION_TYPE_BUY) {mBuyPositionCnt = mBuyPositionCnt + 1.0; cntLotCalculation = cntLotCalculation + 1;}
if(Type == POSITION_TYPE_SELL) {mSellPositionCnt = mSellPositionCnt + 1.0; cntLotCalculation = cntLotCalculation + 1;}
break;
}
Теперь вы изменили код, и он выглядит более понятным, но обратите внимание, что вы больше не проверяете возвращаемое значение OrderSend(), только result.retcode. Это можно исправить с помощью переменной checkOrderSend (*** смотрите здесь), о которой я спрашивал ранее:
bool checkOrderSend=OrderSend(request,result);
if(checkOrderSend) // (*** look here)
{
if(result.retcode==10009 || result.retcode==10008)
{
Print("OrderSend was successful. Code: ",result.retcode);
volume-=result.volume; //If order was successful then reduce volume to 0.0, then the loop will be terminated.break;
}
else
{
Print(ResultRetcodeDescription(result.retcode));
}
}
else
{
Print("OrderSend execution error.");
}
Поэтому, на мой взгляд, первое, что нужно сделать, это исправить этот тест и проверить снова, используя того же проблемного брокера, о котором вы сообщили. Если проблема не повторится, поздравляю, вы действительно решили ошибку, т.е. это не означает, что ваш код будущий или самый безопасный, а означает, что мы нашли ошибку.
На самом деле, вы можете забыть или не менять свой код снова, поскольку ошибка не повторяется, однако в этом случае вы должны помнить, что вы больше не тестируете возвращаемое значение OrderSend().
Здравствуйте,FinanceEngineer, обратите внимание, что в вашем первоначальном коде у вас есть Print("OrderSend Code: "...) в if { } и else { }.
Но else { } имеет прерывание, а ваш отладочный код показывает retcode = 10008 (TRADE_RETCODE_PLACED) x 10.
То есть, судя по всему, вы выводили отладочное условие if { } и ваш break никогда не использовался.
Теперь вы изменили код, и он выглядит более понятным, но обратите внимание, что вы больше не проверяете возвращаемое значение OrderSend(), только result.retcode. Вы можете исправить это с помощью переменной checkOrderSend (*** смотрите здесь), о которой я спрашивал ранее:
Поэтому, на мой взгляд, первое, что нужно сделать, это исправить этот тест и проверить снова, используя того же проблемного брокера, о котором вы сообщили. Если проблема не повторится, поздравляю, вы действительно решили ошибку, т.е. это не означает, что ваш код будущий или самый безопасный, а означает, что мы нашли ошибку.
На самом деле, вы можете забыть или не менять свой код снова, поскольку ошибка не повторяется, однако в этом случае вы должны помнить, что вы больше не тестируете возвращаемое значение OrderSend().
Надеюсь, эта информация поможет вам.
Что насчет возвращаемого кода 10010?
Ордер двойной записи может возникнуть у любого брокера, просто вероятность получить его у Альпари выше, так как вы получаете гораздо больше тиков.
Ордер двойного входа может возникнуть у любого брокера, просто вероятность получить его у Альпари выше, так как вы получаете гораздо больше тиков.
Если вы спрашиваете меня, то, как я уже говорил, я не считаю этот код достаточно надежным и безопасным, и это только один пример недостатка кода возврата, поэтому, пожалуйста, прочитайте еще раз.
Однако, если вы спрашиваете автора кода, как насчет того, чтобы спросить напрямую у него?
Здравствуйте,FinanceEngineer, обратите внимание, что в вашем первоначальном коде у вас есть Print("OrderSend Code: "...) в if { } и else { }.
Но else { } имеет прерывание, а ваш отладочный код показывает retcode = 10008 (TRADE_RETCODE_PLACED) x 10.
То есть, судя по всему, вы выводили отладочное условие if { } и ваш break никогда не использовался.
Теперь вы изменили код, и он выглядит более понятным, но обратите внимание, что вы больше не проверяете возвращаемое значение OrderSend(), только result.retcode. Вы можете исправить это с помощью переменной checkOrderSend (*** смотрите здесь), о которой я спрашивал ранее:
Поэтому, на мой взгляд, первое, что нужно сделать, это исправить этот тест и проверить снова, используя того же проблемного брокера, о котором вы сообщили. Если проблема не повторится, поздравляю, вы действительно решили ошибку, т.е. это не означает, что ваш код будущий или самый безопасный, а означает, что мы нашли ошибку.
На самом деле, вы можете забыть или не менять свой код снова, так как ошибка не повторяется, однако в этом случае вы должны помнить, что вы больше не тестируете возвращаемое значение OrderSend().
Надеюсь, эта информация поможет вам.
Здравствуйте
Я знаю, что это звучит странно. Когда я проверял возвращаемое значение OrderSend(request,result) в предыдущем коде, я получал проблему множественного заказа. Теперь в моем новом коде я не проверяю возвращаемое значение OrderSend(request,result) (но я все же присвоил возвращаемое значение некоторой переменной, чтобы избежать ошибки на новой сборке терминала.
С новым кодом я не получаю проблемы с множественными ордерами. Я использовал Alpari UK, который имеет репутацию отправителя большого количества тиков. Возможно, мой код не идеален, но подумайте вот о чем. В Meta Trader 5 есть довольно много возвращаемых кодов, которые необходимо проверить.
Первый из них - возвращаемое значение из OrderCheck, второй - возвращаемое значение из OrderSend и третий - возвращаемое значение, присвоенное в result.retcode. Я думаю, что какими бы ни были первые два возвращаемых значения, больше всего нас должно волновать последнее, плюс количество фактически выполненного объема.
Поэтому, основываясь на этом факте, я упростил свой код, просто перейдя к проверке result.retcode. Пожалуйста, поправьте меня, если я ошибаюсь. Я думаю, что исполнение ордеров в MT5, безусловно, намного сложнее, чем в MT4, и многие из нас запутались.
Если мы не можем построить ясное дело, используя только логику, тогда мы можем построить ясное дело, используя эксперименты. Поэтому я рекомендую BlindMist или любому другому человеку попробовать этот код у своего брокера и посмотреть, может ли пропуск проверки функции OrderSend быть действительно полезным.
figurelli: Если вы спрашиваете меня, то, как я уже говорил, я не считаю этот код достаточно надежным и безопасным, и это только один пример отсутствия кода возврата, поэтому, пожалуйста, прочитайте еще раз.
Однако, если вы спрашиваете автора кода, как насчет того, чтобы обратиться непосредственно к нему?
Я обратился ко всем, кто участвует в этой теме. Я пропустил ваше сообщение о коде 10010, где он?
Я обратился ко всем, кто участвует в этой теме. Я пропустила ваше сообщение о коде 10010, где он находится?
Привет Алена,
Мне не совсем понятно, что вам нужно знать, так как речь идет только о новом коде FinanceEngineer, и совет о проверке кода возврата OrderSend(), который был изменен по сравнению с оригинальным кодом.
Обратите внимание, что ни его оригинальный код, ни его новый код не имеют теста кода 10010, так что если это имеет отношение к вам, почему вы не спросили с самого первого его сообщения?
В любом случае, не могли бы вы объяснить, зачем нужен код 10010 test для полиса заполнения FOK?
Поскольку это уже не первый раз, когда я вижу, как вы и другие модераторы говорят об этом, знаете ли вы случаи, когда действительно необходим этот код-тест для ордеров FOK (Fill Or Kill), которыми вы могли бы поделиться с нами?
Я знаю, что это звучит странно. Когда я проверял возвращаемое значение OrderSend(request,result) в предыдущем коде, я получал проблему множественного заказа. Теперь в моем новом коде я не проверяю возвращаемое значение OrderSend(request,result) (но я все еще присваиваю возвращаемое значение некоторой переменной, чтобы избежать ошибки на новой сборке терминала.
С новым кодом я не получаю проблемы с множественными ордерами. Я использовал Alpari UK, который имеет репутацию отправителя большого количества тиков. Возможно, мой код не идеален, но подумайте вот о чем. В Meta Trader 5 есть довольно много возвращаемых кодов, которые необходимо проверить.
Первый из них - возвращаемое значение из OrderCheck, второй - возвращаемое значение из OrderSend и третий - возвращаемое значение, присвоенное в result.retcode. Я думаю, что какими бы ни были первые два возвращаемых значения, больше всего нас должно волновать последнее, плюс количество фактически выполненного объема.
Поэтому, основываясь на этом факте, я упростил свой код, просто перейдя к проверке result.retcode. Пожалуйста, поправьте меня, если я ошибаюсь. Я думаю, что исполнение ордеров в MT5, безусловно, намного сложнее, чем в MT4, и многие из нас запутались.
Если мы не можем построить ясное дело, используя только логику, тогда мы можем построить ясное дело, используя эксперименты. Поэтому я рекомендую BlindMist или любому другому человеку попробовать этот код у своего брокера и посмотреть, может ли пропуск проверки функции OrderSend быть действительно полезным.
С уважением.
Пропуск кода возврата OrderSend() не имеет никакого отношения к проблеме двойных ордеров. Простое совпадение.
OrderCheck() также не имеет отношения к проблеме, так как это только предотвращение некоторых ошибок ДО отправки ордера.
Если OrderSend() возвращает false, вы знаете, что возникла проблема, поэтому вы можете проверить, какая именно, и обработать ее в соответствии с вашими потребностями.
Если OrderSend() вернул true, начинаются трудности... см. следующее сообщение.
Здравствуйте,FinanceEngineer, возможно, было бы лучше начать проверку проблемы множественных ордеров в вашем оригинальном коде, так как если мы это сделаем, возможно, мы рассмотрим другие критические моменты здесь и не потеряем фокус, что вы думаете об этом?
Здравствуйте, Фирелли
Это мой новый код. Я изменил его после того, как поднял вопрос о множественных ордерах в этой теме.
Пока что этот код работает нормально с несколькими брокерами. BlindMist может попробовать этот код, чтобы посмотреть, сможет ли он избежать проблемы с множественными ордерами у этого брокера.
Здравствуйте, Фирелли
Это мой новый код. Я изменил его после того, как поднял вопрос о множественных ордерах в этой теме.
Пока что этот код работает нормально с несколькими брокерами. BlindMist может попробовать этот код, чтобы посмотреть, сможет ли он избежать проблемы с множественными ордерами у этого брокера.
Пожалуйста, используйте кнопку SRC при размещении кода.
Код, который вы опубликовали, не может избежать (всех) двойных ордеров, и наоборот, в некоторых случаях он может спровоцировать двойные ордера.
Пожалуйста, используйте кнопку SRC при размещении кода.
Код, который вы опубликовали, не может избежать (всех) двойных ордеров, а наоборот, в некоторых случаях может спровоцировать двойные ордера.
Здравствуйте, Фирелли
Это мой новый код. Я изменил его после того, как поднял вопрос о множественных ордерах в этой теме.
Пока что этот код работает нормально с несколькими брокерами. BlindMist может попробовать этот код, чтобы посмотреть, сможет ли он избежать проблемы с множественными ордерами у этого брокера.
Привет,FinanceEngineer, обратите внимание, что в вашем первоначальном коде у вас есть Print("OrderSend Code: "...) в if { } и else { }.
Но else { } имеет прерывание, а ваш отладочный код показывает retcode = 10008 (TRADE_RETCODE_PLACED) x 10.
То есть, судя по всему, вы выводили отладочное условие if { } и ваш break никогда не использовался.
Теперь вы изменили код, и он выглядит более понятным, но обратите внимание, что вы больше не проверяете возвращаемое значение OrderSend(), только result.retcode. Это можно исправить с помощью переменной checkOrderSend (*** смотрите здесь), о которой я спрашивал ранее:
Поэтому, на мой взгляд, первое, что нужно сделать, это исправить этот тест и проверить снова, используя того же проблемного брокера, о котором вы сообщили. Если проблема не повторится, поздравляю, вы действительно решили ошибку, т.е. это не означает, что ваш код будущий или самый безопасный, а означает, что мы нашли ошибку.
На самом деле, вы можете забыть или не менять свой код снова, поскольку ошибка не повторяется, однако в этом случае вы должны помнить, что вы больше не тестируете возвращаемое значение OrderSend().
Надеюсь, эта информация поможет вам.
Здравствуйте,FinanceEngineer, обратите внимание, что в вашем первоначальном коде у вас есть Print("OrderSend Code: "...) в if { } и else { }.
Но else { } имеет прерывание, а ваш отладочный код показывает retcode = 10008 (TRADE_RETCODE_PLACED) x 10.
То есть, судя по всему, вы выводили отладочное условие if { } и ваш break никогда не использовался.
Теперь вы изменили код, и он выглядит более понятным, но обратите внимание, что вы больше не проверяете возвращаемое значение OrderSend(), только result.retcode. Вы можете исправить это с помощью переменной checkOrderSend (*** смотрите здесь), о которой я спрашивал ранее:
Поэтому, на мой взгляд, первое, что нужно сделать, это исправить этот тест и проверить снова, используя того же проблемного брокера, о котором вы сообщили. Если проблема не повторится, поздравляю, вы действительно решили ошибку, т.е. это не означает, что ваш код будущий или самый безопасный, а означает, что мы нашли ошибку.
На самом деле, вы можете забыть или не менять свой код снова, поскольку ошибка не повторяется, однако в этом случае вы должны помнить, что вы больше не тестируете возвращаемое значение OrderSend().
Надеюсь, эта информация поможет вам.
Что насчет возвращаемого кода 10010?
Ордер двойной записи может возникнуть у любого брокера, просто вероятность получить его у Альпари выше, так как вы получаете гораздо больше тиков.
А как насчет возвращенного кода 10010?
Ордер двойного входа может возникнуть у любого брокера, просто вероятность получить его у Альпари выше, так как вы получаете гораздо больше тиков.
Здравствуйте,FinanceEngineer, обратите внимание, что в вашем первоначальном коде у вас есть Print("OrderSend Code: "...) в if { } и else { }.
Но else { } имеет прерывание, а ваш отладочный код показывает retcode = 10008 (TRADE_RETCODE_PLACED) x 10.
То есть, судя по всему, вы выводили отладочное условие if { } и ваш break никогда не использовался.
Теперь вы изменили код, и он выглядит более понятным, но обратите внимание, что вы больше не проверяете возвращаемое значение OrderSend(), только result.retcode. Вы можете исправить это с помощью переменной checkOrderSend (*** смотрите здесь), о которой я спрашивал ранее:
Поэтому, на мой взгляд, первое, что нужно сделать, это исправить этот тест и проверить снова, используя того же проблемного брокера, о котором вы сообщили. Если проблема не повторится, поздравляю, вы действительно решили ошибку, т.е. это не означает, что ваш код будущий или самый безопасный, а означает, что мы нашли ошибку.
На самом деле, вы можете забыть или не менять свой код снова, так как ошибка не повторяется, однако в этом случае вы должны помнить, что вы больше не тестируете возвращаемое значение OrderSend().
Надеюсь, эта информация поможет вам.
Здравствуйте
Я знаю, что это звучит странно. Когда я проверял возвращаемое значение OrderSend(request,result) в предыдущем коде, я получал проблему множественного заказа. Теперь в моем новом коде я не проверяю возвращаемое значение OrderSend(request,result) (но я все же присвоил возвращаемое значение некоторой переменной, чтобы избежать ошибки на новой сборке терминала.
С новым кодом я не получаю проблемы с множественными ордерами. Я использовал Alpari UK, который имеет репутацию отправителя большого количества тиков. Возможно, мой код не идеален, но подумайте вот о чем. В Meta Trader 5 есть довольно много возвращаемых кодов, которые необходимо проверить.
Первый из них - возвращаемое значение из OrderCheck, второй - возвращаемое значение из OrderSend и третий - возвращаемое значение, присвоенное в result.retcode. Я думаю, что какими бы ни были первые два возвращаемых значения, больше всего нас должно волновать последнее, плюс количество фактически выполненного объема.
Поэтому, основываясь на этом факте, я упростил свой код, просто перейдя к проверке result.retcode. Пожалуйста, поправьте меня, если я ошибаюсь. Я думаю, что исполнение ордеров в MT5, безусловно, намного сложнее, чем в MT4, и многие из нас запутались.
Если мы не можем построить ясное дело, используя только логику, тогда мы можем построить ясное дело, используя эксперименты. Поэтому я рекомендую BlindMist или любому другому человеку попробовать этот код у своего брокера и посмотреть, может ли пропуск проверки функции OrderSend быть действительно полезным.
С уважением.
Если вы спрашиваете меня, то, как я уже говорил, я не считаю этот код достаточно надежным и безопасным, и это только один пример отсутствия кода возврата, поэтому, пожалуйста, прочитайте еще раз.
Я обратился ко всем, кто участвует в этой теме. Я пропустил ваше сообщение о коде 10010, где он?
Я обратился ко всем, кто участвует в этой теме. Я пропустила ваше сообщение о коде 10010, где он находится?
Привет Алена,
Мне не совсем понятно, что вам нужно знать, так как речь идет только о новом коде FinanceEngineer, и совет о проверке кода возврата OrderSend(), который был изменен по сравнению с оригинальным кодом.
Обратите внимание, что ни его оригинальный код, ни его новый код не имеют теста кода 10010, так что если это имеет отношение к вам, почему вы не спросили с самого первого его сообщения?
В любом случае, не могли бы вы объяснить, зачем нужен код 10010 test для полиса заполнения FOK?
Поскольку это уже не первый раз, когда я вижу, как вы и другие модераторы говорят об этом, знаете ли вы случаи, когда действительно необходим этот код-тест для ордеров FOK (Fill Or Kill), которыми вы могли бы поделиться с нами?
Заранее спасибо.
Здравствуйте
Я знаю, что это звучит странно. Когда я проверял возвращаемое значение OrderSend(request,result) в предыдущем коде, я получал проблему множественного заказа. Теперь в моем новом коде я не проверяю возвращаемое значение OrderSend(request,result) (но я все еще присваиваю возвращаемое значение некоторой переменной, чтобы избежать ошибки на новой сборке терминала.
С новым кодом я не получаю проблемы с множественными ордерами. Я использовал Alpari UK, который имеет репутацию отправителя большого количества тиков. Возможно, мой код не идеален, но подумайте вот о чем. В Meta Trader 5 есть довольно много возвращаемых кодов, которые необходимо проверить.
Первый из них - возвращаемое значение из OrderCheck, второй - возвращаемое значение из OrderSend и третий - возвращаемое значение, присвоенное в result.retcode. Я думаю, что какими бы ни были первые два возвращаемых значения, больше всего нас должно волновать последнее, плюс количество фактически выполненного объема.
Поэтому, основываясь на этом факте, я упростил свой код, просто перейдя к проверке result.retcode. Пожалуйста, поправьте меня, если я ошибаюсь. Я думаю, что исполнение ордеров в MT5, безусловно, намного сложнее, чем в MT4, и многие из нас запутались.
Если мы не можем построить ясное дело, используя только логику, тогда мы можем построить ясное дело, используя эксперименты. Поэтому я рекомендую BlindMist или любому другому человеку попробовать этот код у своего брокера и посмотреть, может ли пропуск проверки функции OrderSend быть действительно полезным.
С уважением.