MMA_Breakout_strategy_volume I (без MM или MF) - закодировано WhooDoo22 - страница 4

 

Саймон,

1. ... какой номер билета он выбирает?

RE 1..: У меня возникло недопонимание при использовании функции OrderSelect() в сочетании с функцией OrdersHistoryTotal(). Ни одна из функций не имеет никакого отношения к другой. Поняв это, я могу просто удалить функцию OrderSelect() из начала первого блока кода отправки заказа. Она не нужна (помните, этот код был написан строго для тестирования, а не для работы в демо или реальном режиме. Очевидно, что в конечном итоге он должен быть исправлен, чтобы его можно было использовать на демо- и реальных счетах).

Также, я думаю, что понял ваш повторяющийся пункт "проверьте возвращаемые значения с помощью функции GetLastError()". ПОНЯЛ. Ха-ха :)

2. Если бы вы понимали OrderHistoryTotal() вы...

RE 2.: Я понял назначение функции OrdersHistoryTotal(). У меня было неправильное представление об использовании функции OrderSelect() в сочетании с функцией OrdersHistoryTotal().

3. Если бы вы понимали, как работают скобки { } ...

RE 3.: Я считаю, что понимаю правильное использование скобок. Я также понимаю, что скобки могут быть ненужными в данном случае -

if(OrderType()==OP_BUY)  
   OrderModify(ticket,0,OrderOpenPrice()-5000*Point,0,0,Blue);

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

4. Использование переменной i в качестве номера билета:

RE 4.: Я немного удивлен, что вы не понимаете мою интерпретацию использования переменной i в качестве фиктивного номера билета, а не номера билета. Переменная i - это просто цифра, которая добавляется каждый раз, когда выполняется функция OrderClose(). Переменная i не определяется как фактический номер билета. Я имею дело с частичным закрытием заказа. Это единственный известный мне способ решить эту задачу. Я не против другого решения. У вас есть лучшее решение? :) Я верю, что может быть другой способ, но пока я не вижу причин для изменения используемого процесса. Опять же, я открыт для продуктивных идей.

5. ...если OrderSend() не сработает, тотикет будет = -1:

RE 5..: Пожалуйста, уточните, какую функцию OrderSend() вы имеете в виду (либо "шариковый ролик", первая отправка ордера, либо отправка ордера в рамках вызовов функции закрытия ордера) Это уточнение направит наши мысли в одно русло и укрепит коммуникацию между обоими участниками этого обсуждения.

1. Почему 1-я или 2-я (поправьте, plz) отправка ордера может быть неудачной? (возможно, из-за неправильного использования функции OrderSelect() и OrdersHistory...()? Это будет исправлено).

2. Если отправка ордера не удалась, почему переменная ticket будет представлять -1? Я полагаю, что если отправка заказа не удалась, то переменная ticket все равно будет представлять 0, а не -1. Пожалуйста, объясните.

Спасибо.

 
WhooDoo22:

Саймон,

RE 5..: Пожалуйста, уточните, какую функцию OrderSend() вы имеете в виду (либо "шариковый ролик", первую отправку заказа, либо отправку заказа в рамках вызовов функции закрытия заказа) Это уточнение направит наши мысли в одно русло и укрепит связь между обоими участниками дискуссии.

1. Почему 1-я или 2-я (поправьте, plz) последовательность отправки не работает? (возможно из-за неправильного использования функции OrderSelect() и OrdersHistory...()? Это будет исправлено).

2. Если отправка ордера не удалась, почему переменная ticket будет представлять -1? Я полагаю, что если отправка заказа не удалась, то переменная ticket все равно будет представлять 0, а не -1. Пожалуйста, объясните.

Спасибо.

Если OrderSend() не удается по какой-либо причине ... ."Возвращает номер тикета, присвоенного ордеру торговым сервером, или -1 в случае неудачи." взято из документации. Вы используете переменную ticket, чтобы сохранить возвращаемое значение . ... так что если OrderSend() не сработает (по любой причине), ваш номер билета теперь будет -1 ... вы не проверяете, вы просто надеетесь на лучшее и используете все, что получаете ....


Вы используете переменнуюi как номер билета ... . в этом коде. . .

OrderClose(i, 0.01, Ask, 30, CLR_NONE);

... из документации к OrderClose() первая переменная в вызове функции - это int...ticket - Уникальный номер билета заказа. Итак, предположим, что вы только что закрыли билет №34282694, почему вы думаете, что выполнение i++; next поможет вам в любой форме или виде? Возможно, вы могли бы ответить на этот конкретный вопрос и объяснить, как это работает?



"Я не хочу, чтобы блоки кода советника случайно пропускали вызовы функций из-за отсутствия скобок." ... случайно пропустить? Как, по-вашему, это может произойти? Процессор начнет кашлять или простудится?


Хорошо, то есть вы хотите сказать, что вы полностью понимаете все проблемы, но вместо того, чтобы написать код, который мог бы работать в тестере стратегий , а также в среде Live/Demo, вы специально решили искалечить свой код, написав его так, чтобы он работал только в тестере стратегий? Это то, что вы хотите сказать?

 

Симон,

1. Если OrderSend() не работает по какой-либо причине ... .

RE 1.: Гипотетически, допустим, заказ не выполнен... Если то, что вы сказали, верно, то количество тикетов вычитается на 1 (-1 от общего количества тикетов). Итак, советник отправил и закрыл 25 успешных ордеров. Приходит сигнал на отправку ордера, а функция OrderSend() не срабатывает. Является ли текущее количество ордеров 24? Если да, то переменная i будет указывать ложное количество билетов , потому что переменная i не будет вычитать 1 (-1). Переменная i просто не увеличится, и теперь будет ложное количество билетов. Правильное количество билетов равно 24, а количество билетов по переменной i равно 25. Функция OrderSelect() теперь выбирает неправильный номер билета. Мы пришли к взаимному согласию? :) Таким образом, очевидным решением будет вычитание 1 из переменной i, если функция OrderSend() не сработает. Фух... Вытираю пот со лба над этим вопросом :).

2. процессор заходится в приступе кашля или простужается ?...

RE 2.: Обычно, если я подхватываю вирус гриппа, я пропускаю несколько разумных мыслей, когда говорю. Я предположил, что то же самое относится и к процессорам :) Отбросив юмор, я считаю, что любая возможность пропуска вызова функции из-за отсутствия "{ }", будет простой проблемой, которую можно исправить. Почему бы не быть особо внимательным? Если действительно нет опасений, что вызов функции будет пропущен, то я не вижу причин, почему скобки не следует удалять.

3. Хорошо, так вы говорите...

RE 3.: Я полагаю, что понимаю вопросы, которые вы мне представили до сих пор.

4. Вы специально решили искалечить свой код, написав его так, чтобы он работал только в тестере стратегий?...

RE 4.: Я решил пожертвовать тем, что я считал наименее приоритетным, и сохранить то, что я считал наиболее приоритетным. Это был выбор, сделанный на основе ограничений по времени и уровням приоритетов.

Спасибо.

 
WhooDoo22:

Симон,

1. Если OrderSend() не работает по какой-либо причине ... .

RE 1.: Гипотетически, допустим, заказ не выполнен... Если то, что вы сказали, верно, то количество тикетов вычитается на 1 (-1 от общего количества тикетов). Итак, советник отправил и закрыл 25 успешных ордеров. Приходит сигнал на отправку ордера, а функция OrderSend() не срабатывает. Является ли текущее количество ордеров 24? Если да, то переменная i будет указывать ложное количество билетов , потому что переменная i не будет вычитать 1 (-1). Переменная i просто не увеличится, и теперь будет ложное количество билетов. Правильное количество билетов равно 24, а количество билетов по переменной i равно 25. Функция OrderSelect() теперь выбирает неправильный номер билета. Мы пришли к взаимному согласию? :) Таким образом, очевидным решением будет вычитание 1 из переменной i, если функция OrderSend() не сработает. Фух... Вытираю пот со лба :).

Если то, что я сказал, правда? Почитайте документацию сами, я дал вам ссылку, нажмите на нее и прочитайте....

Вы совершенно не понимаете, как это работает ... извините, но это так. Номера билетов выполняются только последовательно в тестере стратегий ... счетчик билетов не вычитается ... переменная, которую вы используете для хранения номера билета = -1 вы никогда не вычитаете переменную ticket из чего-либо в вашем коде . . .

" Поступает сигнал об отправке заказа, а функция OrderSend() не работает.Текущее количество билетов 24?" Нет, переменнаяticket содержит число -1, не 25 или 24, она содержит -1, поэтому все вызовы OrderSelect(ticket, . . . .), которые последуют за этим, будут неудачными, потому что не существует заказа с номером билета -1, это недопустимый номер билета. ... затем любые вызовы OrderType() также будут неудачными, потому что OrderSelect() не удался. . . . . и затем OrderModify(ticket, . . . .) тоже не удастся. . . .

Как вы сказали, вы понимаете все эти проблемы, но решили проигнорировать их и отправить этот код в codebasee ... Я думаю, мне не нужно тратить время на объяснение всего этого, поскольку вы уже хорошо разбираетесь в этом. Извините за неудобства, я больше не буду отнимать ваше время, пытаясь помочь.

 

Саймон,

Я прочитаю документацию, как вы просили.

1. переменная, которую вы используете для хранения номера билета = -1

RE 1..: На какую переменную вы указываете? Переменная i ИЛИ переменная ticket?

2. переменная, которую вы используете для хранения номера билета = -1

RE 2: Можно ли также сказать, что "когда отправка заказа не удалась, номер билета равен минус единице (-1)?".

Если это так, то если советник отправил и закрыл 24 успешных ордера и не смог отправить 25-й ордер, то номер текущего тикета будет равен минус единице (-1). Правильно? :)

Очевидно, что любые блоки кода, содержащие функцию OrderSelect(), будут работать с ошибкой "invalid ticket number". Я думаю, что номер ошибки 4108, как вы писали ранее, и в документации это тоже написано.

Я не писал: "Я понимаю все эти проблемы". Я написал:"Я думаю, что понимаю вопросы, которые вы мне представили до сих пор".

3. "Как вы сказали, вы понимаете все эти проблемы, но решили проигнорировать их и отправить этот код на codebasee ... Я думаю, мне не нужно больше тратить время, пытаясь объяснить все это, поскольку вы уже хорошо разбираетесь в этом. Извините за неудобства, я больше не буду отнимать ваше время, пытаясь помочь."

RE 3: Я не игнорирую эти вопросы в настоящее время. Моя дискуссия с вами показывает это. Мне интересны все тезисы, которые вы высказали и продолжаете высказывать. Кроме того, я уважаю ваше знание документации по MQL4 и ценю ваше желание помочь. Это не осталось незамеченным, и я благодарю вас за это.

Спасибо.

 

Привет всем,

В этом коде я понял, что не могу изменить цену лота.... почему так...

все время, пока я пытался это сделать, я получал ошибку....

Спасибо... и жду вашего ответа....

Очень хорошая работа WhooDoo22!!!! ;)