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

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

LagmaNN

Местный житель
:confused: уроки не бросай!!!
Взялся за гуж, не говори, что не дюж!!!

я к примеру тему только что увидел (
эта же ветка многие другие переживет и всегда актуальна будет...
и это не значит что весь форум должен сегодня же ее посетить...
неужели цифры Ответов-Просмотров важнее того что здесь?

Требуем продолжения банкета! пжл!
...а я пойду начну с самого первого, надо нагонять :?:

спасибо
СОГЛАСЕН!

eevviillвам бы на видео всё это записать, на ютубе находил пару уроков от разных людей но мало.
 

eevviill

Заблокирован
СОГЛАСЕН!

eevviillвам бы на видео всё это записать, на ютубе находил пару уроков от разных людей но мало.
Та не. Я считаю что такие простые уроки надо в письменном виде давать. И при возникновении вопросов я отвечаю. А если ещё кто то что то пробует создать и не получается, то после разрешения проблнмы это откладывается надолго. А так видео глянул и всё.
 

LagmaNN

Местный житель
eevviill подскажите где вопросы задавать по теме ( Урок 13 - функция iCustom )?
 

LagmaNN

Местный житель
Хочу использовать индикатор (alf non lag mtf) делаю по пимеру выложеному вами но в примере индикатор со с трелками, а в моём нет стрелок мне можно этот кусок пропустить
2)double arrow_up = iCustom(Symbol(),0,"sidus v.2",FastEMA,SlowEMA,3,1); //1
double arrow_down = iCustom(Symbol(),0,"sidus v.2",FastEMA,SlowEMA,4,1); //2
И если я хочу допустим сделать : при пересичении цены сверху вниз ,на второй подтвеждающей свече открываем sell одну позицию + ТР и SL и если пересечение снизу в верх то покупаем.
пример как на рисунке

1 пересечение
2 открываем позицию

то здесь как это написать ?

3)if(arrowup>0) OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SLbuy,TPbuy,"Sidus v2",0,Green);
if(arrow_down>0) OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SLsell,TPsell,"Sidus v2",0,Red);

как я сделал 28 ошибок :oops:
extern double Lot = 0.1;
extern int Stop_Loss = 24;
extern int Take_Profit = 4;
extern int magic = 7352;
extern int Slippage = 2;

1)extern string Indicator = "alf non lag mtf";
extern string TimeFrame = "current time frame";
extern int LookBack = 20;
extern int Median = 5;
extern int Length = 7;
extern int PriceType = PRICE_MEDIAN;
extern bool Interpolate = true;

int start()
{
while(!IsTradeAllowed()) Sleep(2000);
if(Volume[0]>1) return;

2)double = iCustom(Symbol(),0,"alf non lag mtf",alf non lag mtf,0); //0

double SLbuy=0, SLsell=0,TPbuy=0,TPsell=0;
if(Stop_Loss>0) {SLbuy=Ask-Stop_Loss*Point; SLsell=Bid+Stop_Loss*Point;}
if(Take_Profit>0) {TPbuy=Ask+Take_Profit*Point;TPsell=Bid-Take_Profit*Point;}

if(OrdersTotal()<1)
{
3)if(up>0) OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SLbuy,TPbuy,"alf non lag mtf",0,Red);
if(down>0) OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SLsell,TPsell,"alf non lag mtf",0,Red);
}

return(0);

}
ошибок нет но сделки не открывает?

extern double Lot = 0.1;
extern int Stop_Loss = 24;
extern int Take_Profit = 4;
extern int magic = 7352;
extern int Slippage = 2;

extern string Indicator = "alf non lag mtf";
extern string TimeFrame = "current time frame";
extern int LookBack = 20;
extern int Median = 5;
extern int Length = 7;
extern int PriceType = PRICE_MEDIAN;
extern bool Interpolate = true;

int start()
{
while(!IsTradeAllowed()) Sleep(2000);
if(Volume[0]>1) return;

double arrow_up =iCustom(Symbol(),0,"alf non lag mtf",LookBack,Median,Length,PriceType,20,5,7,PRICE_MEDIAN); //0
double arrow_down =iCustom(Symbol(),0,"alf non lag mtf",LookBack,Median,Length,PriceType,20,5,7,PRICE_MEDIAN); //0

double SLbuy=0, SLsell=0,TPbuy=0,TPsell=0;
if(Stop_Loss>0) {SLbuy=Ask-Stop_Loss*Point; SLsell=Bid+Stop_Loss*Point;}
if(Take_Profit>0) {TPbuy=Ask+Take_Profit*Point;TPsell=Bid-Take_Profit*Point;}

if(OrdersTotal()<1)
{
if(arrow_up>1) OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SLbuy,TPbuy,"alf non lag mtf",0,DeepSkyBlue);
if(arrow_down>1) OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SLsell,TPsell,"alf non lag mtf",0,DeepSkyBlue);
}

return(0);
}
 
Последнее редактирование:

eevviill

Заблокирован
...а в моём нет стрелок мне можно этот кусок пропустить
2)double arrow_up = iCustom(Symbol(),0,"sidus v.2",FastEMA,SlowEMA,3,1); //1
double arrow_down = iCustom(Symbol(),0,"sidus v.2",FastEMA,SlowEMA,4,1); //2
Как раз это самое важное. Прочти объяснение к этому.
Я ещё лучше написать в коде iCustom, клацнуть на него левой кнопкой мыши, а потом f1. И мы уидим.

PHP:
Expand Collapse Copy
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift) 

symbol   -   Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ. 
timeframe   -   Период. Может быть одним из периодов графика. 0 означает период текущего графика. 
name   -   Имя пользовательского индикатора. 
...   -   Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора. 
mode   -   Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer. 
shift   -   Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

По простому. iCustom(Символ, таймфрейм, название индикатора,...(здесь если надо через запятую настройки индикатора),номер буфера с которго надо брать данные,бар с которого надо брать данные);

У тебя
PHP:
Expand Collapse Copy
iCustom(Symbol(),0,"alf non lag mtf",LookBack,Median,Length,PriceType,20,5,7,PRICE_MEDIAN)

Должно быть(если тебе надо пересечение). А вообщето надо было разобрать урок с советник по МА.
PHP:
Expand Collapse Copy
double lag1= iCustom(Symbol(),0,"alf non lag mtf",TimeFrame,LookBack,Median,Length,PriceType,Interpolate,0,1);

Дальше. Если тебе нужно персечение вниз, то сравниваем цену открытия бара и закрытия.
PHP:
Expand Collapse Copy
if(OrdersTotal()<1) 
{ 
if(Open[1]>lag1 && Close[1]<lag1) OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SLsell,TPsell,"alf non lag mtf",0,DeepSkyBlue);
}
 

LagmaNN

Местный житель
Дальше. Если тебе нужно персечение вниз, то сравниваем цену открытия бара и закрытия.
PHP:
Expand Collapse Copy
if(OrdersTotal()<1) 
{ 
if(Open[1]>lag1 && Close[1]<lag1) OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SLsell,TPsell,"alf non lag mtf",0,DeepSkyBlue);
}

Это только для продаж, а пересечение в верх заменить OP_SELL,Lot,Bid,Slippage,SLsell,TPsell
на
OP_BUY,Lot,Bid,Slippage,SLbuy,TPbuy,
да?
 

LagmaNN

Местный житель
if(OrdersTotal()<4)

{
if(Open[1]>lag1 && Close[1]<lag1) OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SLsell,TPsell,"alf non lag mtf",0,DeepSkyBlue);
}
{
if(Close[1]<lag1 && Open[1]>lag1) OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SLbuy,TPbuy,"alf non lag mtf",0,DeepSkyBlue);
}
return(0);
}
так правильно?
работает в обе стороны.
ещё вопрос как можно добавить мартина
 

eevviill

Заблокирован
Это только для продаж, а пересечение в верх заменить OP_SELL,Lot,Bid,Slippage,SLsell,TPsell
на
OP_BUY,Lot,Bid,Slippage,SLbuy,TPbuy,
да?
Да, только для продаж. Но если не понятно как по аналогии сделать для покупок, то думаю стоит опять эту ветку перечитать.
 

eevviill

Заблокирован
if(OrdersTotal()<4)

{
if(Open[1]>lag1 && Close[1]<lag1) OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SLsell,TPsell,"alf non lag mtf",0,DeepSkyBlue);
}
{
if(Close[1]<lag1 && Open[1]>lag1) OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SLbuy,TPbuy,"alf non lag mtf",0,DeepSkyBlue);
}
return(0);
}
так правильно?
работает в обе стороны.
ещё вопрос как можно добавить мартина
Да.
Позже буду выкладывать свои функции.
 

LagmaNN

Местный житель
eevviill
будь добр подскажи:
воткнул как в видео показано мартина в сову , ошибок нет но мартин в тестере не работает , все сделки с одним лотом?
и ещё вопрос если я хочу вместо рыночных ордеров использовать лимитники мне достаточно их в коде просто заменить OP_BUY на OP_BUYLIMIT ?
 

pgor

Прохожий
Спасибо eevviill и всем, кто старается научить. Пробую разобраться - но трудно.
 

LagmaNN

Местный житель
чёт похоже на эту ветку он не заходит, а других смысла нет писать , пошлют к програмерам типо закажите вам всё напишут, жаль.
 

SINET2000

Прохожий
Прошу помочь

eevviill помогите разобраться!?

мой первый советник по вашему уроку "iCustom"

HTML:
Expand Collapse Copy
#property copyright "Copyright 2013"
#property link      "http://[email protected]"



extern double StartingLot = 0.01; // Фиксированный лот
extern int TakeProfit = 100; // Тейкпрофит
extern int StopLoss = 20; // Стоплосс
extern int Slippage = 3; // Проскальзывание
extern int magic = 60832; // Магический номер

extern string Indicator = "GOLD999D1~";
extern int FastEMA = 13;
extern int SlowEMA = 21;
extern int RSIPeriod = 9;


int start() 
  { 
while(!IsTradeAllowed()) Sleep(2000); 
if(Volume[0]>1) return; 
   
       double arrow_up = iCustom(Symbol(),0,"GOLD999D1~",FastEMA,SlowEMA,RSIPeriod,2,1);  
       double arrow_down = iCustom(Symbol(),0,"GOLD999D1~",FastEMA,SlowEMA,RSIPeriod,3,1); 

double SLbuy=0, SLsell=0,TPbuy=0,TPsell=0;  
       if(StopLoss>0) {SLbuy=Ask-StopLoss*Point; SLsell=Bid+StopLoss*Point;} 
       if(TakeProfit>0) {TPbuy=Ask+TakeProfit*Point;TPsell=Bid-TakeProfit*Point;} 

       if(OrdersTotal()<1) 
{ 
       if(arrow_up>0) OrderSend(Symbol(),OP_BUY,StartingLot,Ask,Slippage,SLbuy,TPbuy,"GOLD999D1~",0,Green); 
       if(arrow_down>0) OrderSend(Symbol(),OP_SELL,StartingLot,Bid,Slippage,SLsell,TPsell,"GOLD999D1~",0,Red); 
 } 

   return(0); 
  }

В Компиляции нет ошибок!
Прогоняю через тестер,не открывает ордера и в журнале ошибок не пишет! Я вкладываю индикатор,может вы посмотрите!?
Посмотреть вложение GOLD999D1.ex4
Посмотреть вложение GOLD999D1~.mq4
 

eevviill

Заблокирован
Условие на вход не правильное. Не больше 0. А... ты смотрел через ctrl+D что возвращают стрелки когда их нет на графике? Думаю нет. Они возвращают пустое значение.

Тоесть надо не так
if(arrow_down>0)

а так
if(arrow_down!=EMPTY_VALUE)
 

SINET2000

Прохожий
беда

Спасибо eevviill думаю я продвинулся))
правильно я понял сделать?
HTML:
Expand Collapse Copy
if(arrow_down!=EMPTY_VALUE) OrderSend(Symbol(),OP_BUY,StartingLot,Ask,Slippage,SLbuy,TPbuy,"GOLD999D1~",0,Green); 
       if(arrow_up!=EMPTY_VALUE) OrderSend(Symbol(),OP_SELL,StartingLot,Bid,Slippage,SLsell,TPsell,"GOLD999D1~",0,Red);
теперь мне в журнале при тесте выдает "test EURUSD,H1: OrderSend error 130"
поменял сл и тп на ноль и тогда он открыл сделки,только открыл сразу два ордера(и на бай и на селл) рядом и совсем как-то не по индикатору,eevviill где я накосячил??
Безымянный.jpg
 
Верх