Понимаю, что там. Но не понятно почему реализовано именно так..
Каждая отдельная функция библиотеки - это часть целого, а отдельная библиотека - это часть всего комплекса моих библиотек - без этого осознания понять код не возможно.
hoz:
В исходном виде всё-равно не получится пользоваться Вашими библиотеками, т.е. у Вас там всё повязано. Каждая функция на пачке других..
И здесь Вы не правы. Вы когда-нибудь задумывались о структуре "среднестатистического" советника? Индивидуальность советнику придают условия стратегии (т.е. условия входа\выхода), а всё остальное это стандартный код. Как я создаю советники, в том числе и по заказам: беру шаблон (может служить, например, SAR, если нужен сетевой советник) и подсоединяю к нему дополнительную библиотеку, в которой прописаны условия новой стратегии (её я создаю заново).
hoz:
Я, ни в коем случае, не хотел проверять.. Даже более того, сомнений нет, что написано всё очень грамотно. Просто я не совсем всё понимаю, поэтому и сказал, что я думаю, не совсем так.. Смотрю, думаю.. НО не всё понимаю. Вот и спросил.
P.S. С bs_Symbol я так и не понял.
Чтобы осознать реализацию, нужно понять исходные данные. Библиотеки создавались с возможностью работы с любым инструментом (Форекс) и, как в моно, так и в мультивалютном режиме, отсюда и введена глобальная переменная bs_Symbol, которая содержит значение текущего инструмента.
Имеется программный код, который при определённом условии if открывает ордер. Исполнение условия может происходить каждый тик, так как помещён в теле int start().
Нужно:
1. После выполнения условия (и открытия ордера) сделать паузу на открытие новых ордеров, пауза n баров. Например если советник стоит на таймфрейме М30 и мне нужно пропустить 3 часа, то пауза должна быть 6 баров.
2. Программа должна работать в тестере стратегий.
Какой нужен код. И куда будет правильнее его вставить.
Вам в помощь функция iBarShift(). Сначала нужно узнать время открытия последнего ордера и передать в эту функцию, а затем отслеживать возвращаемое этой функцией значение, сравнивая с каким-то числом (в Вашем случае с 6).
TarasBY: Вам в помощь функция iBarShift(). Сначала нужно узнать время открытия последнего ордера и передать в эту функцию, а затем отслеживать возвращаемое этой функцией значение, сравнивая с каким-то числом (в Вашем случае с 6).
Давайте разбираться вместе )
Передаём функции время открытия последнего ордера, и получаем возвращаемое число. Это примерно:
OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);
int my_bar = iBarShift(NULL,PERIOD_M30,OrderOpenTime());
Окей получили номер бара. А как теперь сделать паузу для открытия ордеров на 6 баров?
TarasBY: Явных ошибок в логике не видно. Принтуйте код пошагово. Процедура торговли завязана на значение переменной ticket. В первую очередь отследите её изменения. А также обратите внимание на значение глобальной переменной терминала "TRADECONTEXT" - её значение должно быть равно 0.
Спасибо! Вот только я ваще ни чего не понял(((, как слепой котенок я в этих кодах(((...
Каждая отдельная функция библиотеки - это часть целого, а отдельная библиотека - это часть всего комплекса моих библиотек - без этого осознания понять код не возможно.
Я и пытаюсь осознать, и, попутно натыкаюсь на разные нюансы. Вот поэтому и спрашиваю Вас, т.к. Вам виднее. Вы же автор...
TarasBY:
И здесь Вы не правы. Вы когда-нибудь задумывались о структуре "среднестатистического" советника? Индивидуальность советнику придают условия стратегии (т.е. условия входа\выхода), а всё остальное это стандартный код. Как я создаю советники, в том числе и по заказам: беру шаблон (может служить, например, SAR, если нужен сетевой советник) и подсоединяю к нему дополнительную библиотеку, в которой прописаны условия новой стратегии (её я создаю заново).
Это я понимаю. Просто целиком копировать Ваши библиотеки не хочу. Сами понимаете удобнее создать фундамент, с которым будет удобно работать себе лично.
TarasBY:
Чтобы осознать реализацию, нужно понять исходные данные. Библиотеки создавались с возможностью работы с любым инструментом (Форекс) и, как в моно, так и в мультивалютном режиме, отсюда и введена глобальная переменная bs_Symbol, которая содержит значение текущего инструмента.
И где эта переменная задана явно, если не секрет? :) Я в библиотеке b-PSI@Base.mqh вижу что она только лишь объявлена:
bs_Symbol, // текущий инструмент
Но дальше ничего нет по сути. Да и вообще, значение текущего инструмента вообще по дефолту возвращается через Symbol(). Тогда зачем тут переменная?
Но, так как к данному делу напрямую не относится, просто не акцентируем внимание. А схема выглядит так:
Теперь наш код работает. В моём исполнении получилось так:
int start()
{
if (OrdersTotal()<1) //условие
{
OrderSend(Symbol(),OP_BUY,1,Ask,0,0,0,"Order BUY",0,0); //открытие ордера
}
OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);
int my_bar = iBarShift(NULL,PERIOD_M30,OrderOpenTime());
if (my_bar > 6) //если прошло 6 баров с момента открытия последнего ордера
{
OrderSend(Symbol(),OP_BUY,1,Ask,0,0,0,"Order BUY",0,0); //открываем новый ордер
}
return(0);
}
:) Вот только если его внедрить в советник в том виде что сейчас, то всё начинает работать не корректно.
привет всем. прошу всех откликнуться кто сможет создать скрипт который увеличивает лоты при открытии сделки. подробности пишите в личку. вознаграждение гарантирую при удовлетворении задания
IIya: Теперь наш код работает. В моём исполнении получилось так:
:) Вот только если его внедрить в советник в том виде что сейчас, то всё начинает работать не корректно.
Как я понимаю из-за этой записи:
Что не так?
Я нарисовал только схему, а Ваша задача была продумать дальнейшую логику:
int start()
{
if (OrdersTotal()<1) //условие
{
OrderSend(Symbol(),OP_BUY,1,Ask,0,0,0,"Order BUY",0,0); //открытие ордера
}
else
{
OrderSelect (OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);
int my_bar = iBarShift (NULL,PERIOD_M30,OrderOpenTime());
if (my_bar >= 6) //если прошло 6 баров с момента открытия ордера
{OrderSend (Symbol(),OP_BUY,1,Ask,0,0,0,"Order BUY",0,0);} //открываем новый ордер
}
return(0);
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Понимаю, что там. Но не понятно почему реализовано именно так..
Каждая отдельная функция библиотеки - это часть целого, а отдельная библиотека - это часть всего комплекса моих библиотек - без этого осознания понять код не возможно.
В исходном виде всё-равно не получится пользоваться Вашими библиотеками, т.е. у Вас там всё повязано. Каждая функция на пачке других..
И здесь Вы не правы. Вы когда-нибудь задумывались о структуре "среднестатистического" советника? Индивидуальность советнику придают условия стратегии (т.е. условия входа\выхода), а всё остальное это стандартный код. Как я создаю советники, в том числе и по заказам: беру шаблон (может служить, например, SAR, если нужен сетевой советник) и подсоединяю к нему дополнительную библиотеку, в которой прописаны условия новой стратегии (её я создаю заново).
Я, ни в коем случае, не хотел проверять.. Даже более того, сомнений нет, что написано всё очень грамотно. Просто я не совсем всё понимаю, поэтому и сказал, что я думаю, не совсем так.. Смотрю, думаю.. НО не всё понимаю. Вот и спросил.
P.S. С bs_Symbol я так и не понял.
Друзья! Нужна помощь в доработке советника.
Имеется программный код, который при определённом условии if открывает ордер. Исполнение условия может происходить каждый тик, так как помещён в теле int start().
Нужно:
1. После выполнения условия (и открытия ордера) сделать паузу на открытие новых ордеров, пауза n баров. Например если советник стоит на таймфрейме М30 и мне нужно пропустить 3 часа, то пауза должна быть 6 баров.
2. Программа должна работать в тестере стратегий.
Какой нужен код. И куда будет правильнее его вставить.
Вам в помощь функция iBarShift(). Сначала нужно узнать время открытия последнего ордера и передать в эту функцию, а затем отслеживать возвращаемое этой функцией значение, сравнивая с каким-то числом (в Вашем случае с 6).
Давайте разбираться вместе )
Передаём функции время открытия последнего ордера, и получаем возвращаемое число. Это примерно:
Окей получили номер бара. А как теперь сделать паузу для открытия ордеров на 6 баров?
Давайте разбираться вместе )
Передаём функции время открытия последнего ордера, и получаем возвращаемое число это примерно:
Окей получили номер бара. А как теперь сделать паузу для открытия ордеров на 6 баров?
Вот это неграмотный подход:
Но, так как к данному делу напрямую не относится, просто не акцентируем внимание. А схема выглядит так:
Явных ошибок в логике не видно. Принтуйте код пошагово. Процедура торговли завязана на значение переменной ticket. В первую очередь отследите её изменения. А также обратите внимание на значение глобальной переменной терминала "TRADECONTEXT" - её значение должно быть равно 0.
Спасибо! Вот только я ваще ни чего не понял(((, как слепой котенок я в этих кодах(((...
Спасибо! Вот только я ваще ни чего не понял(((, как слепой котенок я в этих кодах(((...
Каждая отдельная функция библиотеки - это часть целого, а отдельная библиотека - это часть всего комплекса моих библиотек - без этого осознания понять код не возможно.
Я и пытаюсь осознать, и, попутно натыкаюсь на разные нюансы. Вот поэтому и спрашиваю Вас, т.к. Вам виднее. Вы же автор...
И здесь Вы не правы. Вы когда-нибудь задумывались о структуре "среднестатистического" советника? Индивидуальность советнику придают условия стратегии (т.е. условия входа\выхода), а всё остальное это стандартный код. Как я создаю советники, в том числе и по заказам: беру шаблон (может служить, например, SAR, если нужен сетевой советник) и подсоединяю к нему дополнительную библиотеку, в которой прописаны условия новой стратегии (её я создаю заново).
Это я понимаю. Просто целиком копировать Ваши библиотеки не хочу. Сами понимаете удобнее создать фундамент, с которым будет удобно работать себе лично.
Чтобы осознать реализацию, нужно понять исходные данные. Библиотеки создавались с возможностью работы с любым инструментом (Форекс) и, как в моно, так и в мультивалютном режиме, отсюда и введена глобальная переменная bs_Symbol, которая содержит значение текущего инструмента.
И где эта переменная задана явно, если не секрет? :) Я в библиотеке b-PSI@Base.mqh вижу что она только лишь объявлена:
bs_Symbol, // текущий инструментНо дальше ничего нет по сути. Да и вообще, значение текущего инструмента вообще по дефолту возвращается через Symbol(). Тогда зачем тут переменная?
Вот это неграмотный подход:
Но, так как к данному делу напрямую не относится, просто не акцентируем внимание. А схема выглядит так:
:) Вот только если его внедрить в советник в том виде что сейчас, то всё начинает работать не корректно.
Как я понимаю из-за этой записи:
Что не так?
Теперь наш код работает. В моём исполнении получилось так:
:) Вот только если его внедрить в советник в том виде что сейчас, то всё начинает работать не корректно.
Как я понимаю из-за этой записи:
Что не так?
Я нарисовал только схему, а Ваша задача была продумать дальнейшую логику: