Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет, Кронин,
Да, мне есть чему поучиться.....Теперь поймите, что когда есть необходимость получить доступ к значению извне функции, оно должно быть в Global.
Это не так, а также часто является плохой идеей.
Часть причины превращения части кода в функцию заключается в возможности повторного использования этого кода. Если функция жестко закодирована для работы с определенными глобальными переменными, она может стать менее гибкой. Вы должны рассмотреть возможность передачи переменных в функцию, определяемую пользователем. ...не всегда используйте глобально объявленные переменные. Например:
... this не использует глобально объявленную переменную, она использует переменную, переданную ей при вызове...
Привет, Кронин,
Да, мне есть чему поучиться....Нужно понимать, что когда есть необходимость в получении доступа к значению извне функции, которая должна быть в Global.
Значения, которые находятся на внешнем умножаются на 10, потому что советник должен также работать на 5-значных брокерах. Я использую этот блок кода, чтобы получить это автоматически, но получаю совет от WHRoeder, который не совместим с металлами.
Спред пары может быть переменным. Поэтому я использую код для выхода за пределы уровня Stop.
Что касается этого вопроса "Но я подправил ваши входные параметры, чтобы не все ордера открывались практически в одно и то же время. Возможно, вам нужно проверить параметры по умолчанию."
Насколько я могу судить (извините, если это не так...), OpenDistance поддерживается как 2 пункта и ReturnDistance теперь тоже с 2. Сейчас я вижу, что ордер открывается, но не при разнице в 2 пункта. Это работает с тестером на платформе ECN брокера (IC Markets). Может ли это иметь какое-то значение?
На самом деле ордера открываются не одновременно, но похоже, что Open Distance и ReturnDist не учитываются, чтобы получить правильное расстояние для открытия ордеров.
У вас в коде написано, что;
Я включил строку, выделенную жирным шрифтом, чтобы вызвать функцию OpenOppositeOrder и здесь не уверен, что это правильно. С другой стороны, не могу понять, где происходит сравнение текущего тика с последним тиком, который произошел за 2 пункта до этого (OpenDistance).
Извините, если я начинаю утомлять вас своими вопросами.
С наилучшими пожеланиями
Луис
Привет, Кронин,
Я просто обратил больше внимания на то, зачем спрашивать, каков спред, и просто искать тестер, что что-то не так. Здесь спред равен 50 (5 цифр), так что на самом деле 5. Хмм... Я перезапущу платформу и подтвержу.
Луис
Это неправда и часто является плохой идеей.
Если функция жестко закодирована для работы с определенными глобальными переменными, она может стать менее гибкой. Вам следует рассмотреть возможность передачи переменных в функцию, определяемую пользователем. ...не всегда используйте глобально объявленные переменные. Например:
... this не использует глобально объявленную переменную, она использует переменную, переданную ей при вызове...
Привет, RaptorUK.
Спасибо за ваше вмешательство для поддержания меня в правильном направлении...
Кстати, Вы слышали что-нибудь подобное тому, что я упомянул, относительно проблемы с тестером, то есть, что в данный момент спред составляет 50, когда в пятницу не было?
С наилучшими пожеланиями
Луис
Привет, RaptorUK.
Спасибо за ваше вмешательство для поддержания меня в правильном направлении...
С наилучшими пожеланиями
Луис
Да, идея с функцией была не совсем в том, чтобы объявить их все как void..... Я просто удалил объявление в вашей функции void MM() для LotSize, чтобы позволить советнику снова торговать... - Я думал, мы поговорим об этом позже... :-)
По поводу "не открывать на уровне 2 пунктов".
Например, у меня нет тиковых данных для тестирования, также спред больше 2 пунктов (я мог бы настроить его, но что это даст, если у меня нет тиковых данных?). Все это затрудняет тестирование чего-либо с надежностью закрытых стопов.
16:21:09 _help_53198_markettorderdecnqv80 inputs: EquityPercent=1; FixedLotSize=0.01; Multiplier=2; LotDigits=2; StopLoss=50; TakeProfit=20; TrailingStop=2; MinimumProfit=3; Slippage=3; OpenDistance=2; ReturnDist=1; MinStop=1; MagicNumber=8012013; MaxOrders=7;
EURUSD,M1: открыто #1 покупка 0.01 EURUSD по 1.43310 ok
EURUSD,M1: выставлен первоначальный ордер на покупку # 1
EURUSD,M1: изменить #1 купить 0.01 EURUSD по 1.43310 sl: 1.42810 tp: 1.43510 ok
EURUSD,M1: open #2 sell 0.01 EURUSD по 1.43257 ok
EURUSD,M1: Установлен противоположный ордер на продажу # 2
EURUSD,M1: изменить #2 sell 0.01 EURUSD по 1.43257 sl: 1.43757 tp: 1.43057 ok
EURUSD,M1: open #3 buy 0.01 EURUSD at 1.43283 ok
EURUSD,M1: Размещен противоположный ордер на покупку # 3
EURUSD,M1: изменить #3 buy 0.01 EURUSD по 1.43283 sl: 1.42783 tp: 1.43483 ok
EURUSD,M1: open #4 sell 0.01 EURUSD по 1.43230 ok
EURUSD,M1: Установлен противоположный ордер на продажу # 4
EURUSD,M1: изменить #4 sell 0.01 EURUSD по 1.43230 sl: 1.43730 tp: 1.43030 ok
EURUSD,M1: open #5 buy 0.01 EURUSD at 1.43280 ok
EURUSD,M1: Размещен противоположный ордер на покупку # 5
EURUSD,M1: изменить #5 buy 0.01 EURUSD по 1.43280 sl: 1.42780 tp: 1.43480 ok
EURUSD,M1: открыть #6 продать 0.01 EURUSD по 1.43200 ok
EURUSD,M1: Установлен противоположный ордер на продажу # 6
EURUSD,M1: изменить #6 sell 0.01 EURUSD по 1.43200 sl: 1.43700 tp: 1.43000 ok
EURUSD,M1: открыть #7 купить 0.01 EURUSD по 1.43250 ok
EURUSD,M1: Размещен противоположный ордер на покупку # 7
EURUSD,M1: изменить #7 buy 0.01 EURUSD по 1.43250 sl: 1.42750 tp: 1.43450 ok
EURUSD,M1: изменить #7 купить 0.01 EURUSD по 1.43250 sl: 1.43267 tp: 1.43450 ok
EURUSD,M1: изменить #7 купить 0.01 EURUSD по 1.43250 sl: 1.43283 tp: 1.43450 ok
EURUSD,M1: изменить #3 купить 0.01 EURUSD по 1.43283 sl: 1.43300 tp: 1.43483 ok
EURUSD,M1: модификация #5 покупка 0.01 EURUSD по 1.43280 sl: 1.43300 tp: 1.43480 ok
EURUSD,M1: модификация #7 купить 0.01 EURUSD по 1.43250 sl: 1.43300 tp: 1.43450 ok
Тестер: стоп-лосс #3 на 1.43300 (1.43300 / 1.43340)
Тестер: стоп-лосс #5 на 1.43300 (1.43300 / 1.43340)
Тестер: стоп-лосс #7 на 1.43300 (1.43300 / 1.43340)
EURUSD, M1: LastClosedTicket=7
EURUSD,M1: Ордер с ticketnr: 7 достиг SL! Закрываем все открытые ордера
EURUSD,M1: close #6 sell 0.01 EURUSD at 1.43200 sl: 1.43700 tp: 1.43000 at price 1.43340
EURUSD,M1: close #4 sell 0.01 EURUSD по 1.43230 sl: 1.43730 tp: 1.43030 по цене 1.43340
EURUSD,M1: закрытие #2 sell 0.01 EURUSD по 1.43257 sl: 1.43757 tp: 1.43057 по цене 1.43340
EURUSD,M1: закрытие #1 покупка 0.01 EURUSD по 1.43310 sl: 1.42810 tp: 1.43510 по цене 1.43300
С моей точки зрения, это делает то, что вы хотите. Я никогда не изменял ваш расчет для OpenOpposite или открытия начального ордера.
Да, идея с функцией была не совсем в том, чтобы объявить их все как void..... Я просто удалил объявление в вашей функции void MM() для LotSize, чтобы позволить советнику снова торговать... - Я думал, мы поговорим об этом позже... :-)
По поводу "не открывать на уровне 2 пунктов".
Например, у меня нет тиковых данных для тестирования, также спред больше 2 пунктов (я мог бы настроить его, но что это даст, если у меня нет тиковых данных?). Все это затрудняет тестирование чего-либо с надежностью закрытых стопов.
16:21:09 _help_53198_markettorderdecnqv80 inputs: EquityPercent=1; FixedLotSize=0.01; Multiplier=2; LotDigits=2; StopLoss=50; TakeProfit=20; TrailingStop=2; MinimumProfit=3; Slippage=3; OpenDistance=2; ReturnDist=1; MinStop=1; MagicNumber=8012013; MaxOrders=7;
EURUSD,M1: открыто #1 покупка 0.01 EURUSD по 1.43310 ok
EURUSD,M1: выставлен первоначальный ордер на покупку # 1
EURUSD,M1: изменить #1 купить 0.01 EURUSD по 1.43310 sl: 1.42810 tp: 1.43510 ok
EURUSD,M1: open #2 sell 0.01 EURUSD по 1.43257 ok
EURUSD,M1: Установлен противоположный ордер на продажу # 2
EURUSD,M1: изменить #2 sell 0.01 EURUSD по 1.43257 sl: 1.43757 tp: 1.43057 ok
EURUSD,M1: open #3 buy 0.01 EURUSD at 1.43283 ok
EURUSD,M1: Размещен противоположный ордер на покупку # 3
EURUSD,M1: изменить #3 buy 0.01 EURUSD по 1.43283 sl: 1.42783 tp: 1.43483 ok
EURUSD,M1: open #4 sell 0.01 EURUSD по 1.43230 ok
EURUSD,M1: Установлен противоположный ордер на продажу # 4
EURUSD,M1: изменить #4 sell 0.01 EURUSD по 1.43230 sl: 1.43730 tp: 1.43030 ok
EURUSD,M1: open #5 buy 0.01 EURUSD at 1.43280 ok
EURUSD,M1: Размещен противоположный ордер на покупку # 5
EURUSD,M1: изменить #5 buy 0.01 EURUSD по 1.43280 sl: 1.42780 tp: 1.43480 ok
EURUSD,M1: открыть #6 продать 0.01 EURUSD по 1.43200 ok
EURUSD,M1: Установлен противоположный ордер на продажу # 6
EURUSD,M1: изменить #6 sell 0.01 EURUSD по 1.43200 sl: 1.43700 tp: 1.43000 ok
EURUSD,M1: открыть #7 купить 0.01 EURUSD по 1.43250 ok
EURUSD,M1: Размещен противоположный ордер на покупку # 7
EURUSD,M1: изменить #7 buy 0.01 EURUSD по 1.43250 sl: 1.42750 tp: 1.43450 ok
EURUSD,M1: изменить #7 buy 0.01 EURUSD at 1.43250 sl: 1.43267 tp: 1.43450 ok
EURUSD,M1: изменить #7 купить 0.01 EURUSD по 1.43250 sl: 1.43283 tp: 1.43450 ok
EURUSD,M1: изменить #3 купить 0.01 EURUSD по 1.43283 sl: 1.43300 tp: 1.43483 ok
EURUSD,M1: модификация #5 купить 0.01 EURUSD по 1.43280 sl: 1.43300 tp: 1.43480 ok
EURUSD,M1: модификация #7 купить 0.01 EURUSD по 1.43250 sl: 1.43300 tp: 1.43450 ok
Тестер: стоп-лосс #3 на 1.43300 (1.43300 / 1.43340)
Тестер: стоп-лосс #5 на 1.43300 (1.43300 / 1.43340)
Тестер: стоп-лосс #7 на 1.43300 (1.43300 / 1.43340)
EURUSD, M1: LastClosedTicket=7
EURUSD,M1: Ордер с ticketnr: 7 достиг SL! Закрываем все открытые ордера
EURUSD,M1: close #6 sell 0.01 EURUSD at 1.43200 sl: 1.43700 tp: 1.43000 at price 1.43340
EURUSD,M1: close #4 sell 0.01 EURUSD по 1.43230 sl: 1.43730 tp: 1.43030 по цене 1.43340
EURUSD,M1: закрытие #2 sell 0.01 EURUSD по 1.43257 sl: 1.43757 tp: 1.43057 по цене 1.43340
EURUSD,M1: закрытие #1 покупка 0.01 EURUSD по 1.43310 sl: 1.42810 tp: 1.43510 по цене 1.43300
С моей точки зрения, это делает то, что вы хотите. Я никогда не менял ваш расчет для OpenOpposite или открытия начального ордера.
Привет, Кронин,
Я загружаю другую платформу от другого брокера и буду ждать, чтобы протестировать ее снова и сообщить вам о результатах.
Еще раз спасибо
Луис
Привет, Кронин,
Я только что подтвердил, что в тестере спред подскочил до 5 пунктов (50). Так что сегодня в тестере ваш код работает отлично, теперь я поставил его на демо-счет ECN и посмотрим.
С наилучшими пожеланиями
Луис
Привет, Кронин,
Один вопрос;
Когда советник запускается, разве он не должен подождать, пока цена отклонится на 2 пункта, прежде чем открыть первый ордер?
Когда второй ордер имеет условие для открытия, он открывается в нужном месте.
С наилучшими пожеланиями
Луис
Привет, Кронин,
Один вопрос;
Когда советник запускается, разве он не должен подождать, пока цена отклонится на 2 пункта, прежде чем открыть первый ордер?
Когда второй ордер имеет условие для открытия, он открывается в нужном месте.
С наилучшими пожеланиями
Луис
Привет Луис
Ну, возможно, так и должно быть согласно стратегии, но, конечно, не согласно коду...
if(OpenDistance*pt && BuyAllowed) //<-- this doesn't make any sense.
Вышеприведенное читается как if(2*0.0001 && true) . Любое числовое выражение, отличное от 0, интерпретируется как true. Поэтому выражение всегда истинно, если BuyAllowed истинно.
Извините, я не обращал внимания на первое открытие серии, и поскольку оно составляет всего 2 пункта, я не заметил ничего необычного.
Попробуйте это:
Привет, Кронин,
Извините, что наскучил вам своими ограничениями в понимании кода, тем не менее, еще не поздно учиться и я стараюсь сделать все возможное, чтобы разобраться в коде, который вы так любезно предоставили.
Сейчас я тестирую лучшие настройки для использования и представлю ваш последний обновленный код.
Заранее благодарю Вас за поддержку в этих вопросах (приключения...я имею в видуCOPY00).
Луис
Привет, Кронин,
Ваша модификация работает. Вы ограничили максимальное количество ордеров, но можно ли сделать так, чтобы все они закрывались?
Я пытался сделать это с помощью следующего кода, но, похоже, не работает.
С наилучшими пожеланиями
Луис