Уроки по программированию на языке MQL4 от eevviill

  • Автор темы Автор темы eevviill
  • Дата начала Дата начала

Rennela

Новичок форума
СКОЛЬКО ВРЕМЕНИ НУЖНО С НУЛЯ ДО МАСТЕРА ДЕЛАТЬ ИНДИКАТОРЫ И СОВЕТНИКИ?
Все зависит от скорости процессов протекающих в полушариях вашего головного мозга-логика,мышление,память и т.д.
 

kaiske

Активный участник
месяцы или 10 лет? какой язык программирования
 

Elvis Burunduk

Элитный участник
СКОЛЬКО ВРЕМЕНИ НУЖНО С НУЛЯ ДО МАСТЕРА ДЕЛАТЬ ИНДИКАТОРЫ И СОВЕТНИКИ?
месяцы или 10 лет? какой язык программирования

Нужна вся жизнь, :D *hi*
Если остановишься в развитии - ты выпал из обоймы.
Язык обновляется, добавляются новые функции и т.д. :D
 

MrGreen86

Гуру форума
месяцы или 10 лет? какой язык программирования
для того чтобы выучить mql4 (без ООП) достаточно недели. это без какого либо опыта программирование, совсем с нуля. Протестировано на подопытном ) При условии конечно соображающей головы.

Но как и во всем нужен опыт. Во первых писать будите хорошо, во вторых решение каких либо задачь у вас будет занимать не пару дней, а пару десятков минут ) На это нужно года 3 минимум.

То что языки "меняются" и "добавляются новые функции" не должно вас пугать. Во первых они редко меняются, т.е. так чтобы ваше решение которое вы писали месяц назад перестало работать.. + если соблюдать некоторые правила то такое врятли произойдет с вашим кодом. А вот новому вы будите радоваться, и осваивается это "новое" очень быстро в дальнейшем.
 
Последнее редактирование:

Артмен

Новичок форума
Здравствуйте, eevviill. Я попробовал написать советник на основании вашего шаблона.
И вылезла такая ошибка: 'securyty_f' - function not defined. Вот тот самый код:
int OnInit()
{
//securyty
if(!securyty_f()) return(INIT_FAILED);

prevbars=Bars;

if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1) nor_lot=1;

if(use_data_from_closed_candle) CC=1;

//martini-other off
if(use_martini) {use_breakEven=false;use_traling_stop=false;use_percent_of_deposit=false;use_opposite_signal_to_exit=false;}

//offline chart
if(ChartGetInteger(0,CHART_IS_OFFLINE))
{
prev_bid=Close[0];

while(!IsStopped())
{
RefreshRates();
if(prev_bid!=Close[0]) {prev_bid=Close[0];OnTick();}
Sleep(100);
}
}//end offline chart



return(INIT_SUCCEEDED);
}
 

eevviill2

Местный знаток
удали
PHP:
Expand Collapse Copy
//securyty
if(!securyty_f()) return(INIT_FAILED);
И есть по-новее шаблон.
 

Вложения

drugwdrug

Активный участник
удали
PHP:
Expand Collapse Copy
//securyty
if(!securyty_f()) return(INIT_FAILED);
И есть по-новее шаблон.

Неплохо было бы видеть в коде вашего шаблона комментарии к функциям и действиям. Раз уж тема называется - Уроки программирования!!!
 

drugwdrug

Активный участник
удали
PHP:
Expand Collapse Copy
//securyty
if(!securyty_f()) return(INIT_FAILED);
И есть по-новее шаблон.

Там у вас несколько вариантов мартини, то
Не хватает функций закрытия всего при достижении профита:
1. В пунктах n+
2. В валюте депо $+
3. В процентах %+
 

ovpmusic

Интересующийся
Пример.
PHP:
Expand Collapse Copy
1)int Profit_f()
{
2)double prof;
3)for(int i=OrdersTotal()-1; i>=0; i--)
 {
 OrderSelect(i,SELECT_BY_POS);
 {
 if(OrderMagicNumber()==MagicNumber)[B][/B]
 {
4)if (OrderType()==OP_BUY)  prof+=(Bid - OrderOpenPrice())/Point;   
5)if (OrderType()==OP_SELL) prof+=(OrderOpenPrice()-Ask) /Point;
 }
 }
 }
 
 return(prof);
}



Пояснение.
1)Пишем пользовательскую функцию типа int(целые числа), так как пункты дробными быть не могут.
2)Объявляем переменную в которую будем записывать количество пунктов.
3)Перебераем все ордера и выбираем по нужному нам меджику.
4)Если ордер бай то записываем в нашу переменную (цену-цену открытия ордера)/размер 1-го пункта
5)Если ордер сел то записываем в нашу переменную (цену открытия ордера-цену)/размер 1-го пункта

А как узнать цену или количество пунктов, которое пройдет цена, когда прибыль достигнет определенного уровня, причём если есть два ордера, один Sell, один Buy с разными объёмами.
Пример:
Советник по сигналу открывает ордер Sell объёмом 0,01. При прохождении цены вверх, расстояния равного Distance(в нашем случае 30 пунктов), сов открывает встречный ордер Buy увеличенным лотом (LotSell * LotMultipler), к примеру, LotMultipler=2, тогда Buy=0.02. Прибыль от одного ордера должна составлять 20 пунктов, т.е. при лоте 0,01 прибыль в валюте будет =2. Поскольку у нас открыто 2 ордера, то общая прибыль должна составить 2+2=4. Меня интересует формула расчёта, как получить цену безубытка и цену закрытия обоих ордеров, когда сумма профита достигнет 4(ордера разнонаправленные). Если цена развернулась и пошла в другую сторону от последнего открытого ордера, то через расстояние Distance, открывается противоположный ордер от последнего открытого, также увеличенным лотом, т.е. 0,02*2=0,04 и т.д. Ордеров может быть и не 2, а 3, 4, 5, N.. число. Т.е. если ордеров 3, то сумма общего профита должна быть 6, если 4 ордера - то 8 и т.д.
Как узнать цену безубытка и цену закрытия всех ордеров или кол-во пунктов от последнего ордера если известен общий профит в валюте, а не в пунктах, причем ордера разнонаправленные? (см. скрин)
 

Вложения

  • 2018-02-11_14-40-00.png
    2018-02-11_14-40-00.png
    48,7 КБ · Просмотры: 59

drugwdrug

Активный участник
Добрый день!
Подскажите пожалуйста функцию:
пробитие 50% предыдущей свечи с выбором отрабатываемого старшего таймфрейма. Открытие на бай и на селл.
Спасибо!
 
Верх