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

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

#5626
6 минут назад, 0ll_ сказал:

awals я просил файл, который Вы получаете с сервера, можно в виде текста. Мы же в нём будем данные искать

Понял.

MyStopLossJson_Test_EURUSD_60.txt6 скач.

#5627

Всем привет! Будьте добры посмотрите пожалуйста на индикатор и подскажите или поправьте, почему у меня не получается данные по буферам получить.

HP_DIFF.ex45 скач. Proverka 2.mq411 скач.

#5628

Здравствуйте. В советнике необходимо , чтоб ордера открывались только на открытии бара ( М15 ).

 

if( timepref==Time[0])return ;
   int timeprev=Time[0];

 maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1);
  if(CountBuy()==0 && Bid>maprice )
   {
    ticket= OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue);

 

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

Что не так , не пойму.

Изменено 3 июля, 2019 пользователем batmanuyga

#5629
5 часов назад, batmanuyga сказал:

Здравствуйте. В советнике необходимо , чтоб ордера открывались только на открытии бара ( М15 ).

 

if( timepref==Time[0])return ;
   int timeprev=Time[0];

 maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1);
  if(CountBuy()==0 && Bid>maprice )
   {
    ticket= OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue);

 

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

Что не так , не пойму.

Данная переменная int timeprev; должна быть глобальной, т.е. находиться за пределами функции void OnTick() и тп.

Ну и конструкция должна быть немного иной.

if (timeprev != Time[0]) {  
    maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1);
    if (CountBuy()==0 && Bid>maprice) {
        ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue);
        timeprev = Time[0];
    }
}

 

Изменено 3 июля, 2019 пользователем Ent

#5630

awals , файл состоит из повторяющихся структур = {"time1":1562086800,"time2":1562090400,"price_sell":1.127,"price_buy":1.132,"sell_stop":2.5604,"buy_stop":2.5266}

разделённых ",". В MQL есть функция StringSplit, которая разделяет строку на подстроки и записывает в массив, разделяющим символом предлагаю сделать "{".

Функция вернёт размер массива, берём последнюю запись [n-1] и опять засовываем в StringSplit, только с разделителем ",".

Полученный массив по строчно анализируем и записываем в переменные.

Вот пример работы StringSplit:

string strArr[];

ValueCount = StringSplit( strURL, StringGetCharacter("{",0), strArr);

#5631
5 часов назад, batmanuyga сказал:

if( timepref==Time[0])return ;
   int timeprev=Time[0];

Если код скопирован из советника, то у Вас опечатка в имени переменной timepref(v)

Изменено 3 июля, 2019 пользователем usver73

#5632
4 часа назад, 0ll_ сказал:

awals , файл состоит из повторяющихся структур = {"time1":1562086800,"time2":1562090400,"price_sell":1.127,"price_buy":1.132,"sell_stop":2.5604,"buy_stop":2.5266}

разделённых ",". В MQL есть функция StringSplit, которая разделяет строку на подстроки и записывает в массив, разделяющим символом предлагаю сделать "{".

Функция вернёт размер массива, берём последнюю запись [n-1] и опять засовываем в StringSplit, только с разделителем ",".

Полученный массив по строчно анализируем и записываем в переменные.

Вот пример работы StringSplit:

string strArr[]; 

ValueCount = StringSplit( strURL, StringGetCharacter("{",0), strArr);

Спасибо, но ни черта не понял, первый массив получил, а как дальше так и не понял.
Как выбрать последнею запись, как последний массив записать в переменные.

#5633
13 часов назад, awals сказал:

Как выбрать последнею запись

 

18 часов назад, 0ll_ сказал:

 

Функция вернёт размер массива, берём последнюю запись [n-1]

считываем в переменную типа string значение последней записи 
string LastLine = strArr[n-1], 
где n- размер массива strArr.
и дальше

18 часов назад, 0ll_ сказал:

и опять засовываем в StringSplit, только с разделителем ",".

string strArr2[];

ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2);

#5634
13 часов назад, usver73 сказал:

 

считываем в переменную типа string значение последней записи 
string LastLine = strArr[n-1], 
где n- размер массива strArr.
и дальше

string strArr2[];

ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2);

Огромное спасибо, всё получилось и ещё вопрос, а как можно добиться чтобы не толка последняя записи была, а например последние 5 записей?

#5635
8 минут назад, awals сказал:

а как можно добиться чтобы не толка последняя записи была, а например последние 5 записей?

организуйте цикл, типа

for(int i=ArraySize(strArr)-6;i<ArraySize(strArr);i++)
{
 // здесь получаете значение из массива и обрабатываете как было раньше расписано
  string LastLine = strArr[i];
  int ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2);
}

 

#5636
В 04.07.2019 в 19:52, usver73 сказал:

организуйте цикл, типа


for(int i=ArraySize(strArr)-6;i<ArraySize(strArr);i++)
{
 // здесь получаете значение из массива и обрабатываете как было раньше расписано
  string LastLine = strArr[i];
  int ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2);
}

 

Добрый день, подскажите если какие-нибудь путные Книги по обучению MQL4? Или может вы порекомендуете.

#5637
6 часов назад, awals сказал:

подскажите если какие-нибудь путные Книги по обучению MQL4?

Уровень-то у Вас не начальный - книг для продвинутых не встречал, в основном справкой пользуемся...

Если индикатор получился, может опубликуете на форуме? Думаю многим полезно будет.

#5638
1 час назад, 0ll_ сказал:

Уровень-то у Вас не начальный - книг для продвинутых не встречал, в основном справкой пользуемся...

Если индикатор получился, может опубликуете на форуме? Думаю многим полезно будет.

Вот в этом и дело почему ищу Книгу, Уровень у меня начинающий это мой первый Индикатор, который пробую паписта.
А вот сам Индикатор ну или что получилось.не судите учусь.

StopLoss.mq411 скач.

#5639

Подскажите зеленому как правильно расписать цикл for() для следующей задачки:

if(allbuyprofit<-AccountBalance()*LockTrigger/100)OrderSend(Symbol(),OP_SELL,LockLotSell,Bid,3,sl,tp," ",MagicLockSell,0,Pink);

нужно открытие лока не только при достижении процента просадки LockTrigger, но и повторные при достижении любой кратной просадки (1, 2, 3, 4 и т.д.)*LockTrigger.

#5640

Подскажите как написать, чтобы в терминалы отображались значки открытых ордеров на основе скрипта
 

for(int i=0;i<OrdersHistoryTotal();i++)
{
 OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
 if(OrderSymbol()!=Symbol()||OrderType()>1)continue;
 name=OrderTicket();
 color col=SellColor;
 if(OrderType()==0)col=BuyColor;
 
 datetime a = OrderOpenTime();
 double b = OrderOpenPrice();
 datetime c = OrderCloseTime();
 double d = OrderClosePrice();
 datetime f;
 
 ObjectCreate(name+"T",OBJ_ARROW,0,a,b);
 ObjectSet(name+"T",OBJPROP_COLOR,col);         // - цвет
 ObjectSet(name+"T",OBJPROP_ARROWCODE,1);       // - стрелка вправо

 ObjectCreate(name+"F",OBJ_ARROW,0,c,d);
 ObjectSet(name+"F",OBJPROP_COLOR,col);         // - цвет
 ObjectSet(name+"F",OBJPROP_ARROWCODE,3);       // - стрелка влево
 
 y=NormalizeDouble( OrderProfit() + OrderCommission() + OrderSwap(), 2);
 f = c+5*PeriodSeconds(PERIOD_CURRENT);
 ObjectCreate(name+"L",OBJ_TEXT,0,f,(d+35*Point)); 
 ObjectSetText(name+"L",DoubleToString(y,2)+"$",10,"Tahoma",LabelColor);
 
 
       
 x=x+y;
}

 

HistoryOrders.mq44 скач.

Изменено 7 июля, 2019 пользователем NightTraider

#5641
12 часов назад, kudinoff сказал:

нужно открытие лока не только при достижении процента просадки LockTrigger, но и повторные при достижении любой кратной просадки (1, 2, 3, 4 и т.д.)*LockTrigger

Прости, не понятно, объясни по-шагово откуда возникнет просадка х2 х3 ...  на залокированных ордерах?

В любом случае это решается не циклом, а формулой с коэффициентом кратности просадки int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) );

потом на этот коэффициент умножаете лот локирующего ордера или дистанцию ТП - я не знаю как Вы торгуете и как будете лок раскрывать...

 

NightTraider по идее приведённый Вами код должен показать все закрытые ордера, в том числе ручные и открытые скриптом - в нём нет фильтрации по магику.

#5642
11 часов назад, NightTraider сказал:

Подскажите как написать, чтобы в терминалы отображались значки открытых ордеров на основе скрипта
 


for(int i=0;i<OrdersHistoryTotal();i++)
{
 OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
 if(OrderSymbol()!=Symbol()||OrderType()>1)continue;
 name=OrderTicket();
 color col=SellColor;
 if(OrderType()==0)col=BuyColor;
 
 datetime a = OrderOpenTime();
 double b = OrderOpenPrice();
 datetime c = OrderCloseTime();
 double d = OrderClosePrice();
 datetime f;
 
 ObjectCreate(name+"T",OBJ_ARROW,0,a,b);
 ObjectSet(name+"T",OBJPROP_COLOR,col);         // - цвет
 ObjectSet(name+"T",OBJPROP_ARROWCODE,1);       // - стрелка вправо

 ObjectCreate(name+"F",OBJ_ARROW,0,c,d);
 ObjectSet(name+"F",OBJPROP_COLOR,col);         // - цвет
 ObjectSet(name+"F",OBJPROP_ARROWCODE,3);       // - стрелка влево
 
 y=NormalizeDouble( OrderProfit() + OrderCommission() + OrderSwap(), 2);
 f = c+5*PeriodSeconds(PERIOD_CURRENT);
 ObjectCreate(name+"L",OBJ_TEXT,0,f,(d+35*Point)); 
 ObjectSetText(name+"L",DoubleToString(y,2)+"$",10,"Tahoma",LabelColor);
 
 
       
 x=x+y;
}

 

HistoryOrders.mq4 6 \u043a\u0411 · 0 загрузок

Вот

Order_Indikator.mq46 скач.

#5643
4 часа назад, 0ll_ сказал:

Прости, не понятно, объясни по-шагово откуда возникнет просадка х2 х3 ...  на залокированных ордерах?

В любом случае это решается не циклом, а формулой с коэффициентом кратности просадки int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) );

потом на этот коэффициент умножаете лот локирующего ордера или дистанцию ТП - я не знаю как Вы торгуете и как будете лок раскрывать...

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

int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) ) выдаст абракадабру. Если имелась в виду именно кратность просадки тригеру, то правильнее MathFloor( allbuyprofit / AccountBalance() / ( LockTrigger / 100 ) )

Как в дальнейшем использовать kfx, чтобы открытие локов было однократным для каждого значения kfx (до тех пор, пока локирующий ордер, соответствующий этой кратности, не закрыт)?

Пока что все попытки приводят к хаотичному открытию ордеров.

#5644
4 часа назад, kudinoff сказал:

Локирование частичное, поэтому дальнейший рост просадки возможен

Самый простой вариант это создать глобальную переменную (лучше на уровне терминала) kfz = 1;

и внести в Вашу формулу изменения:

if( allbuyprofit< -AccountBalance() *LockTrigger *kfz /100)
{ OrderSend(Symbol(),OP_SELL,LockLotSell,Bid,3,sl,tp," ",MagicLockSell,0,Pink);  kfz++; }

После закрытия лока ( ну или слива ;) ) не забыть присвоить kfz = 1;

#5645
2 часа назад, 0ll_ сказал:

kfz++

Не работает

#5646
14 часов назад, kudinoff сказал:
16 часов назад, 0ll_ сказал:

kfz++

Не работает

Сочувствую...

#5647

Оказалось ошибка тикета из-за которой он беспорядочно открывал ордера.

Изменено 10 июля, 2019 пользователем kudinoff

#5648

Ребята, привет!


Поделитесь пожалуйста хорошим обучающим курсом программирования mql4.
Ссылка на курс из форума не приходит на почту.

 

Спасибо!

#5649
15 минут назад, AdA сказал:

Ребята, привет!
Поделитесь пожалуйста хорошим обучающим курсом программирования mql4.
Ссылка на курс из форума не приходит на почту.

Спасибо!

Ссылка на онлайн и оффлайн версии курса курса

Здравствуйте, дорогой подписчик ! 

Посмотреть видеокурс "Форекс для чайников" вы можете двумя способами:

 

1) Онлайн версия

Доступна по ссылке:

http://tlap.io/wppage/videokurs-foreks-dlya-chaynikov/

 

А еще на сайте есть раздел посвященный Урокам по MQL, переходим к последней странице и от туда изучаем.

http://tlap.io/category/uroki-po-mql/

 

2) Оффлайн версия

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

 

Вот ваша ссылка на скачивание архива с видеокурсом  "Форекс для Чайников":
https://hb.bizmrg.com/tlap-files/courses/Chainik2018.rar

 

Также вы можете скачать этот курс с торрент-трекера:
https://rutracker.net/forum/viewtopic.php?t=4126559

Изменено 10 августа, 2019 пользователем MikR0ReR

#5650
1 час назад, MikR0ReR сказал:

Ссылка на онлайн и оффлайн версии курса курса

Здравствуйте, дорогой подписчик ! 

Посмотреть видеокурс "Форекс для чайников" вы можете двумя способами:

 

1) Онлайн версия

Доступна по ссылке:

http://tlap.io/wppage/videokurs-foreks-dlya-chaynikov/

 

А еще на сайте есть раздел посвященный Урокам по MQL, переходим к последней странице и от туда изучаем.

http://tlap.io/category/uroki-po-mql/

 

2) Оффлайн версия

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

 

Вот ваша ссылка на скачивание архива с видеокурсом  "Форекс для Чайников":
https://hb.bizmrg.com/tlap-files/courses/Chainik2018.rar

 

Также вы можете скачать этот курс с торрент-трекера:
https://rutracker.net/forum/viewtopic.php?t=4126559

Нужен курс по программированию.
Нашел на другом источнике.
Спасибо!

Еще вопрос, подскажите пожалуйста, сколько потребуется времени (в часах, примерно) чтобы освоить программирование в объеме:
открытие и сопровождение советником сетки ордеров по сигналам торговой системы, учитывающей ATR и показатели выхода новостей по новостному календарю? 

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

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