ошибка 4756 - страница 3

 
BHC:

Мой советник выдает странные ошибки в билде 778. Объем 0.1 нормализован и явно не является недействительным.

Не могли бы вы проверить свойства символа Silver и сообщить нам, каковыSYMBOL_VOLUME_MIN и SYMBOL_VOLUME_STEP. Не всегда достаточно просто нормализовать, например, если бы ваш шаг объема был 0,5, то нормализация вам бы не помогла.
 
RaptorUK:
Не могли бы вы проверить свойства символа для Silver и сообщить нам, каковыSYMBOL_VOLUME_MIN и SYMBOL_VOLUME_STEP. Не всегда достаточно просто нормализовать, например, если бы ваш Volume Step был 0.5, то нормализация вам бы не помогла.

Этот источник

Print(" volume step: ",SymbolInfoDouble(_trade_symbol,SYMBOL_VOLUME_STEP),", volume minimum: ",", ",SymbolInfoDouble(_trade_symbol,SYMBOL_VOLUME_MIN)); return;
         

Дает следующее в журналах тестера...

2013.03.12 12:46:01 Core 1 2013.01.23 13:32:59 volume step: 0.1, volume minimum: , 0.1

 
BHC:

Этот источник

Дает следующее в журналах тестера...

2013.03.12 12:46:01 Core 1 2013.01.23 13:32:59 volume step: 0.1, volume minimum: , 0.1

Проблема может быть в вашем отчете об ошибках, я не проверял с mql5, но это не будет работать с mql4. ...

if(_result.retcode != ( 0 || TRADE_RETCODE_PLACED || TRADE_RETCODE_DONE))

Вместо этого попробуйте следующее...

if( _result.retcode != 0 && _result.retcode != TRADE_RETCODE_PLACED && _result.retcode != TRADE_RETCODE_DONE )
 
Это помогло избавиться от ошибок! Спасибо
 
BHC:
Это помогло избавиться от ошибок! Спасибо
if(_result.retcode != ( 0 || TRADE_RETCODE_PLACED || TRADE_RETCODE_DONE))

Есть ли какой-нибудь язык, где этот синтаксис допустим?

 
На самом деле, я тоже никогда не сталкивался с этим... Я думаю, я получил это от чьей-то реализации ordercheck. Это было на этом сайте...
 
angevoyageur:

Есть ли какой-нибудь язык, где этот синтаксис допустим?

Возможно, если бы переменные были типа bool, это имело бы некоторый смысл. Я видел, как несколько человек делали подобные вещи на форуме mql4, это простая ошибка.
 
RaptorUK:
Вы нашли именно эту тему?https://www.mql5.com/en/forum/10850 В ней сообщается о той же проблеме, что и у меня.

Я не видел эту тему.

Решение такое, как я вам сказал, с обработчиком события OnTradeTransaction() (НЕ ИСПОЛЬЗУЙТЕ ЭТОТ КОД КАК ЕСТЬ, ЭТО ДЛЯ ПРОБЫ И ТЕСТА):

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
                        {

    if (trans.type == TRADE_TRANSACTION_DEAL_ADD) {

        if (execution == SYMBOL_TRADE_EXECUTION_MARKET) {
            if (!trade.PositionModify(_Symbol, _sl, _tp))
                if (debugMode) {
                    Print("Modify SL & TP failed. Return code=", trade.ResultRetcode(), ". Code description: ", trade.ResultRetcodeDescription());
                    Print("Deal ticket : ", trans.deal);
                }
            else
                if (debugMode) Print("Modify SL & TP executed successfully. Return code=", trade.ResultRetcode(), " (", trade.ResultRetcodeDescription(),")");
        }

    }
}   

Это работает. _sl и _tp - глобальные переменные, конечно, лучше обрабатывать локально. trade имеет тип класса CTrade. Я полагаю, что вы можете сделать то же самое с OrderSend().

 
angevoyageur:

Я не видел эту тему.

Решение, как я уже говорил, с обработчиком события OnTradeTransaction() (НЕ ИСПОЛЬЗУЙТЕ ЭТОТ КОД КАК ЕСТЬ, ОН ДЛЯ ПРОБЫ И ТЕСТА):

Это работает. _sl и _tp - глобальные переменные, конечно, лучше обрабатывать локально. trade имеет тип класса CTrade. Я полагаю, что вы можете сделать то же самое с OrderSend().

Я держусь подальше от класса CTrade в попытке изучить основы, я никогда не использовал ООП, так что классы, структуры и т.д. являются частью моей кривой обучения в mql5.

Я уверен, что OnTradeTransaction() предложит обходной путь, но он кажется мне довольно ужасным для использования даже для простого советника, над которым я работаю, в документации к OrderSend() также нет упоминания о необходимости его использования. и я думаю, я подтвержу, что я видел ту же проблему в тестере стратегий, не уверен, как именно это может произойти, я попробую еще раз, добавив больше отчетов об ошибках, чтобы убедиться.

 
RaptorUK:

Я держусь подальше от класса CTrade, пытаясь изучить основы, я никогда не использовал ООП, поэтому классы, структуры и т.д. являются частью моей кривой обучения в mql5.

Я уверен, что OnTradeTransaction() предложит обходной путь, но он кажется мне довольно ужасным для использования даже для простого советника, над которым я работаю, в документации к OrderSend() также нет упоминания о необходимости его использования. и я думаю, я подтвержу, что я видел ту же проблему в тестере стратегий, не уверен, как именно это может произойти, я попробую снова, добавив больше отчетов об ошибках, чтобы убедиться.

Я понимаю вашу позицию по поводу ООП.Оно всегда занимает больше времени, чем "традиционный" подход, и действительно полезно для большого (или среднего) проекта.

Мне очень интересно узнать, существует ли "классическое" решение для нашей проблемы.

Причина обращения: