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

Раздел: Язык программирования MQL4
Автор темы: eevviill
Создана: 2012-03-23 23:58
Ответов: 573 | Просмотров: 170138
Страница 29 из 29
Источник: https://forexsystemru.com/threads/67073/page-29

---

## Rennela — 2017-12-15 12:59

> Цитата (kaiske):
> СКОЛЬКО ВРЕМЕНИ НУЖНО С НУЛЯ ДО МАСТЕРА ДЕЛАТЬ ИНДИКАТОРЫ И СОВЕТНИКИ?

Все зависит от скорости процессов протекающих в полушариях вашего головного мозга-логика,мышление,память и т.д.

## kaiske — 2017-12-15 16:23

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

## Elvis Burunduk — 2017-12-16 02:20

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

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

## MrGreen86 — 2017-12-19 22:09

> Цитата (kaiske):
> месяцы или 10 лет? какой язык программирования

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

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

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

## Артмен — 2017-12-25 17:22

Здравствуйте, 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;

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

      return(INIT_SUCCEEDED);
     }

## eevviill2 — 2017-12-26 00:28

удали
//securyty
if(!securyty_f()) return(INIT_FAILED);
И есть по-новее шаблон.

## drugwdrug — 2017-12-26 05:18

> Цитата (eevviill2):
> удали
> //securyty
> if(!securyty_f()) return(INIT_FAILED);
> И есть по-новее шаблон.

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

## drugwdrug — 2017-12-26 05:39

> Цитата (eevviill2):
> удали
> //securyty
> if(!securyty_f()) return(INIT_FAILED);
> И есть по-новее шаблон.

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

## Артмен — 2017-12-26 13:40

Большое вам спасибо, eevviill!

## drugwdrug — 2017-12-30 20:24

> Цитата (eevviill2):
> удали
> //securyty
> if(!securyty_f()) return(INIT_FAILED);
> И есть по-новее шаблон.

Как у вас работают эти функции?

** extern bool use_opposite_signal_to_exit = true; 
 extern bool use_custom_signal_to_exit = true;
**

## drugwdrug — 2018-01-12 19:57

автор тупо игнорит свою ветку.

## ovpmusic — 2018-02-11 14:49

> Цитата (eevviill):
> Пример.
> 
> 1)int Profit_f()
> {
> 2)double prof;
> 3)for(int i=OrdersTotal()-1; i>=0; i--)
>  {
>  OrderSelect(i,SELECT_BY_POS);
>  {
>  if(OrderMagicNumber()==MagicNumber)****
>  {
> 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 и т.д.
Как узнать цену безубытка и цену закрытия всех ордеров или кол-во пунктов от последнего ордера если известен общий профит в валюте, а не в пунктах, причем ордера разнонаправленные? (см. скрин)

## eevviill2 — 2018-02-11 17:35

> Цитата (drugwdrug):
> автор тупо игнорит свою ветку.

Ты что плохо видишь?
Автор темы забанен:D

## drugwdrug — 2018-10-27 12:27

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

