Обучение языку MQL4 под MetaTrader 4📌

От xbms, 13 апреля, 2013 в Уголок Программиста

#4526

Пиши в текстовый файл .csv набор нужных полей через разделитель ";"


Благодарю Вас за ответ!
То есть целесообразно по мэджику/паре создавать свой отдельный файл, а не мечтать об одном файле, но многостраничном с разбивкой по листам? ;)
#4527

Да как угодно! Можете создать один файл для конкретной совы (просто проверять наличие, если нет - создавать), и добавить поля мэджик и пару, или создавать отдельные файлы для каждой пары, можете создать один файл для нескольких сов - ограничение только Ваша фантазия.
Многостраничный документ создать таким образом не удастся, для многостраничного xls файла можно взять старенький формат ехеля и писать на нём, но я Вас уверяю - эти усилия не окупятся...

#4528

Здраствуйте!

Подскажите пожалуйста - как можно реализовать проверку (и потом возвращать значение) результата прошлой сделки ... Т.е. был ли стоп или профит.

Спасибо.

#4529


Здраствуйте!

Подскажите пожалуйста - как можно реализовать проверку (и потом возвращать значение) результата прошлой сделки ... Т.е. был ли стоп или профит.

Спасибо.


держи готовый советник:

oppositnik.mq45 скач.

#4530

Подскажите пожалуйста - как можно реализовать проверку (и потом возвращать значение) результата прошлой сделки ... Т.е. был ли стоп или профит.

Когда ордер открыт, его тикет записывается в переменную int. Потом ордер исчез - значит его закрыло, выделяете ордер по тикету и читаете его профит: если профит Если был включен трал по СЛ или у Вас сетка, то это не сработает, но в большинстве случаев, имхо самый простой вариант.
#4531

.

Изменено 24 мая, 2017 пользователем М13

#4532

Считаем, что рабочий ордер выделен.
if ( MathAbs( Bid - OrderOpenPrice() ) > TargetDist * _Point && Bid


Здравствуйте нужно чтобы закрытие происходило именно выше Order OpenPrice на заданное кол-во пунктов.
А в Вашем примере кода ордер закрывается и ниже , и выше открытия.

Изменено 20 мая, 2017 пользователем Roman 13

#4533

закрытие происходило именно выше Order OpenPrice

Ну тогда так:
if ( OrderType() == OP_BUY && Bid - OrderOpenPrice() > TargetDist * _Point && Bid
#4534

подскажите пожалуйста что начать вдуплять что бы вдуплить что вобще надо вписывать в функциях, хочу написать трнедовую сову на параболике, которую будет фильровать фильтр флента/ транда. так же хочу добавить в алгоритм выход новостей, и сделать так что бы ели случается сильная валотильность появлялась сетка ордеров с динамич лотами после смены тренда на параболике.
смотрю щас курс молодого бойца mql, но понимаю что надо для начала самому почитать и попытаться вникнуть что там вобще в параметрах есть . может вобще можно каким нибудь обращом вставить чужой код в свой индюк, что бы не изобретать велосипед, и просто подредактировать что мне надо, исходя из моих потребностей в фильре и сетке ордеров на высокой валотильности с динамич лотом?
ну и таким же методом добавить трейлинг стоп, в зависимости от валотильности рынка

Изменено 21 мая, 2017 пользователем novikov433

#4535

Ну тогда так:
if ( OrderType() == OP_BUY && Bid - OrderOpenPrice() > TargetDist * _Point && Bid



Добрый день, а если мы закрываем ордер на продажу , то код будет выглядеть так
if ( OrderType() == OP_BUY && OrderOpenPrice() - Bid > TargetDist * _Point && Bid > High[1] ), если так то
код не работает, советник закрывает ордера и выше и ниже OrderOpenPrice и не соблюдает TargetDist .
#4536

а если мы закрываем ордер на продажу

if ( OrderType() == OP_SELL && OrderOpenPrice() - Bid > TargetDist * _Point && Bid > High[1] )
Закрывать Бай будет, Селл не будет. Описывайте внимательнее. Удачи.
#4538


Новый урок http://tradelikeapro.ru/mql4-sobiraem-tikovyie-dannyie/

мне кажется по этой теме нужно создать отдельную ветку в рубрике разработки форума!
#4539

if ( OrderType() == OP_SELL && OrderOpenPrice() - Bid > TargetDist * _Point && Bid > High[1] )
Закрывать Бай будет, Селл не будет. Описывайте внимательнее. Удачи.



Здравствуйте , скажите а что делать, если в тестере стратегий все ордера закрываются в соответствии с алгоритмом, а на демо счете ,график 5 мин, ордера закрываются правильно через раз.
#4540

а что делать, если в тестере стратегий все ордера закрываются в соответствии с алгоритмом, а на демо счете ,график 5 мин, ордера закрываются правильно через раз.

Нужно обрабатывать ошибки при запросе на закрытие ордера и если ордер не закрыт (например оффквот), то через паузу повторять запрос.
#4541

Нужно обрабатывать ошибки при запросе на закрытие ордера и если ордер не закрыт (например оффквот), то через паузу повторять запрос.



Ордера закрываются все , но неправильно , например ордер Buy должен закрыться выше OrderOpenPrice на 20 пунктов,
а в действительности он может закрыться и ниже открытия, или выше , но без соблюдения количества пунктов.
#4542
Roman 13 Нужно смотреть логи, нужно вставлять в код Print-ы в которых указывать какой ордер закрывается, причина закрытия, текущая цена и т.д. Потом читать лог и разбираться
#4543

Добрый день!
Подскажите, как измерить в пунктах расстояние от , например Ma, до текущей цены?
Дошел до этого:
double Price = MathAbs(iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,0 )/Point);
if (Ask > Price)
{ punkt = Ask- Price
else punkt = Price-Ask

}

#4544

как измерить в пунктах расстояние от , например Ma, до текущей цены?

Лучше так: punkt = MathAbs ( Ask - iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,0 ) ) / Point;
#4545

Спасибо а для села так?
punkt = MathAbs (iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,0 )-Bid ) / Point;
&??

#4546

Спасибо а для села так?


d1w4m3, функция MathAbs() возвращает число по модулю, т. е. без знака. Используется здесь как раз для удобства, чтобы не задумываться что из чего вычесть и просто получить абсолютное расстояние. Поэтому можете вычитать хоть цену из средней, хоть среднюю из цены, число вернется одинаковое. А какую цену бид или аск использовать, то тут уже зависит от того, какое расстояние хотите найти: от средней до текущей бид, или от средней до текущей аск.
#4547

Спасибо
Вот в чем загвоздка, принцип я понял, а вот так возможно?
uptr = MathAbs ( Ask - iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n) ) / Point;
Когда у меня 2 буфера?
И потом я задаю условие,
/// extern int LevelPunkt = 50;
-------------------------------------
If (LevelPunkt*Point)>uptr //если кол-во заданных пунктов, больше кол-ва пунктов от Slope до Ask
то открываем
В чем я здесь не прав?

#4548

Всем доброго времени суток! Заранее извиняюсь за ломанное построение вопроса - немного новичок. Сам вопрос - Как вшить в советника способность торговать в определенные дни недели (выбранные дни отключить) ? Думаю просто скопировать код с советника Generic, но опасаюсь упустить какую-то переменную/функцию. На какие переменные стоит обращать внимание? Или может я ошибся немного веткой?
Заранее благодарен за ответ!

#4549

Всем доброго времени суток! Заранее извиняюсь за ломанное построение вопроса - немного новичок. Сам вопрос - Как вшить в советника способность торговать в определенные дни недели (выбранные дни отключить) ? Думаю просто скопировать код с советника Generic, но опасаюсь упустить какую-то переменную/функцию. На какие переменные стоит обращать внимание? Или может я ошибся немного веткой?
Заранее благодарен за ответ!



Здравствуйте! Самый простейший вариант выглядит примерно так:

//эту переменную объявляем во входных параметрах
extern int NonTradingDay=1;//Неторговый день(1-понедельник, 5-пятница)

//эту строчку пишем в самом верху внутри функции OnTick()
if(TimeDayOfWeek(TimeCurrent())==NonTradingDay)return;


Но тут следует учесть, что при таком варианте советник не будет делать вообще ничего. Т.е. если у Вас будут в рынке ордера, открытые до наступления неторгового дня, то бот никак их обрабатывать не сможет.
#4550
d1w4m3 если хотите, чтоб Бай открылся строго на линии, то для Бая нужно использовать Аск. Но имейте в виду, что при использовании функции MathAbs у Вас будет два сигнала - один выше линии и один ниже, если это имеет значение, то MathAbs не используйте!!!

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025