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

hoz

Активный участник
sochinik, читай учебник для начала и эту ветку с самого начала. То что ты задал в прошлом посте это слишком уж.
Ответом на твой предыдущий вопрос будет "Объявление (глобальных) переменных". прочитай это и поймёшь.
 

Genadi22

Новичок форума
Доброго времени суток…
Учитель – видит Бог я пытался и даже старался,- но как был двоечником видать так и остался…
может кто откликнется…
Речь идёт о индикаторе который показывал бы состояние закрытой свечи,- то есть если цена закрытой свечи выше её открытия то она зелёного цвета,- если цена закрытия ниже открытия то красного… - и выглядело бы на графике примерно так:
 

Вложения

  • 30.png
    30.png
    2,2 КБ · Просмотры: 440

eevviill

Заблокирован
Доброго времени суток…
Учитель – видит Бог я пытался и даже старался,- но как был двоечником видать так и остался…
может кто откликнется…
Речь идёт о индикаторе который показывал бы состояние закрытой свечи,- то есть если цена закрытой свечи выше её открытия то она зелёного цвета,- если цена закрытия ниже открытия то красного… - и выглядело бы на графике примерно так:
Candle range
http://forexsystemsru.com/indikatory/69427-indikatory-ot-eevviill.html#post498320
 

Genadi22

Новичок форума
Candle range
http://forexsystemsru.com/indikatory/69427-indikatory-ot-eevviill.html#post498320

Спасибо за оперативность...
Но это совсем не то... - просто если свеча закрылась - бычья то зелёный,- если медвежья - то красный,- без указания пунктов или ещё какой информации
 

eevviill

Заблокирован
Спасибо за оперативность...
Но это совсем не то... - просто если свеча закрылась - бычья то зелёный,- если медвежья - то красный,- без указания пунктов или ещё какой информации
Я не готовый продукт дал, а шаблон.
 

eevviill

Заблокирован
SL_TP для ECN счетов.

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

PHP:
void SL_TP()
{
if(StopLoss<MarketInfo(Symbol(),MODE_STOPLEVEL) || TakeProfit<MarketInfo(Symbol(),MODE_STOPLEVEL)) {Alert("Stops to close to price");return;}



for (int i=OrdersTotal()-1; i>=0; i--)
 {
   OrderSelect(i,SELECT_BY_POS);
   {
   if(OrderMagicNumber()==magic)
   {  
   
   if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)
    {    
   while(IsTradeContextBusy()) Sleep(1000);
   if(StopLoss>0 && OrderStopLoss()!=NormalizeDouble(OrderOpenPrice()-StopLoss*Point,Digits)) OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-StopLoss*Point,Digits),OrderTakeProfit(),0,CLR_NONE);
   while(IsTradeContextBusy()) Sleep(1000);
   if(TakeProfit>0 && OrderTakeProfit()!=NormalizeDouble(OrderOpenPrice()+TakeProfit*Point,Digits)) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()+TakeProfit*Point,Digits),0,CLR_NONE); 
    }
    
   if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)
    {
    while(IsTradeContextBusy()) Sleep(1000);
    if(StopLoss>0 && OrderStopLoss()!=NormalizeDouble(OrderOpenPrice()+StopLoss*Point,Digits)) OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+StopLoss*Point,Digits),OrderTakeProfit(),0,CLR_NONE);
    while(IsTradeContextBusy()) Sleep(1000);
   if(TakeProfit>0 && OrderTakeProfit()!=NormalizeDouble(OrderOpenPrice()-TakeProfit*Point,Digits)) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()-TakeProfit*Point,Digits),0,CLR_NONE); 
    }
   }              
   }
 }
}
 

eevviill

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

Подправил.

PHP:
void SL_TP()
{
if(StopLoss<MarketInfo(Symbol(),MODE_STOPLEVEL) || TakeProfit<MarketInfo(Symbol(),MODE_STOPLEVEL)) {Alert("Stops to close to price");return;}



for (int i=OrdersTotal()-1; i>=0; i--)
 {
   OrderSelect(i,SELECT_BY_POS);
   {
   if(OrderMagicNumber()==magic)
   {  
   
   if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)
    {    
   while(IsTradeContextBusy()) Sleep(1000);
   if(StopLoss>0 && OrderStopLoss()!=NormalizeDouble(OrderOpenPrice()-StopLoss*Point,Digits)) OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-StopLoss*Point,Digits),OrderTakeProfit(),0,CLR_NONE);
   while(IsTradeContextBusy()) Sleep(1000);
   if(TakeProfit>0 && OrderTakeProfit()!=NormalizeDouble(OrderOpenPrice()+TakeProfit*Point,Digits)) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()+TakeProfit*Point,Digits),0,CLR_NONE); 
    }
    
   if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)
    {
    while(IsTradeContextBusy()) Sleep(1000);
    if(StopLoss>0 && OrderStopLoss()!=NormalizeDouble(OrderOpenPrice()+StopLoss*Point,Digits)) OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+StopLoss*Point,Digits),OrderTakeProfit(),0,CLR_NONE);
    while(IsTradeContextBusy()) Sleep(1000);
   if(TakeProfit>0 && OrderTakeProfit()!=NormalizeDouble(OrderOpenPrice()-TakeProfit*Point,Digits)) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()-TakeProfit*Point,Digits),0,CLR_NONE); 
    }
   }              
   }
 }
}
Подправил.
PHP:
///////////////////////////////////////////////////////////////////////////
void SL_TP()
{

if((StopLoss<MarketInfo(Symbol(),MODE_STOPLEVEL) && StopLoss!=0) || (TakeProfit<MarketInfo(Symbol(),MODE_STOPLEVEL) && TakeProfit!=0)) {Alert("Stops to close to price");return;}



for (int i=OrdersTotal()-1; i>=0; i--)
 {
   if(OrderSelect(i,SELECT_BY_POS))
   {
   if(OrderMagicNumber()==magic)
   {
   if(OrderSymbol()==Symbol())
   {    
   if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)
   {   
   if(StopLoss>0 && OrderStopLoss()==0)
   { 
   while(IsTradeContextBusy()) Sleep(1000);
   if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-StopLoss*Point,Digits),OrderTakeProfit(),0,CLR_NONE)) continue; 
   }
   } 
   } 
   }
   }
 }
 
  
 for (int i2=OrdersTotal()-1; i2>=0; i2--)
 {
   if(OrderSelect(i2,SELECT_BY_POS))
   {
   if(OrderMagicNumber()==magic)
   { 
   if(OrderSymbol()==Symbol())
   {   
   if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)
   {   
   if(TakeProfit>0 && OrderTakeProfit()==0) 
   {
   while(IsTradeContextBusy()) Sleep(1000);
   if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()+TakeProfit*Point,Digits),0,CLR_NONE)) continue;
   }
   }
   }
   } 
   }
 }
 
 

for (int i3=OrdersTotal()-1; i3>=0; i3--)
 {
   if(OrderSelect(i3,SELECT_BY_POS))
   {
   if(OrderMagicNumber()==magic)
   {   
   if(OrderSymbol()==Symbol())
   { 
   if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)
   {    
   if(StopLoss>0 && OrderStopLoss()==0) 
   {
   while(IsTradeContextBusy()) Sleep(1000);
   if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+StopLoss*Point,Digits),OrderTakeProfit(),0,CLR_NONE)) continue;   
   } 
   }
   }   
   }  
   }            
 }
 
 for (int i4=OrdersTotal()-1; i4>=0; i4--)
 {
   if(OrderSelect(i4,SELECT_BY_POS))
   {
   if(OrderMagicNumber()==magic)
   {   
   if(OrderSymbol()==Symbol())
   { 
   if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)
   {   
   if(TakeProfit>0 && OrderTakeProfit()==0) 
   {
   while(IsTradeContextBusy()) Sleep(1000);
   if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()-TakeProfit*Point,Digits),0,CLR_NONE)) continue;   
   } 
   } 
   }  
   }   
   }           
 }
 

 
}
 
Последнее редактирование:

svitanak

Почетный гражданин
Добрый день. Только недавно создал свой скрипт и появилась мысль стать учителем

Если кому то будет интересно изучать MQL4 с самых азов и делится опытом, то прошу написать что то в теме чтобы я знал кого учу и или оно вообще кому то надо

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

eevviill

Заблокирован
Добрый день. Только недавно создал свой скрипт и появилась мысль стать учителем

Если кому то будет интересно изучать MQL4 с самых азов и делится опытом, то прошу написать что то в теме чтобы я знал кого учу и или оно вообще кому то надо

здравствуйте уважаемый. если ваше предложение в силе то я хотел бы стать вашим учеником. начинаю изучать ваши уроки и читать ветку. так что можете иметь меня ввиду.
с уважением
ОК. Только если вопросы будут не по ветке, то просьба задавать их в ветке Вопросы по MQL4.
И у меня функции не доконца доделаны(отшлифованы). Это понял с опытом. Раньше казалось что пишу всё правильно.

P.S. Надо будет попросить дать возможность поизменять немного уроки.
 

Ugar

Гуру форума
ОК. Только если вопросы будут не по ветке, то просьба задавать их в ветке Вопросы по MQL4.
И у меня функции не доконца доделаны(отшлифованы). Это понял с опытом. Раньше казалось что пишу всё правильно.

P.S. Надо будет попросить дать возможность поизменять немного уроки.
Не стоит стыдиться своих ошибок. Их надо признавать и делать выводы. А шлифовка функций, процесс бесконечный. Пусть каждый сам себе шлифует как считает нужным. Это и будет частью процесса обучения.
 

sochinik

Местный житель
Не стоит стыдиться своих ошибок. Их надо признавать и делать выводы. А шлифовка функций, процесс бесконечный. Пусть каждый сам себе шлифует как считает нужным. Это и будет частью процесса обучения.

Хотелось бы побольше таких программистов ,как eevviill, так как они не только сами изучают Mql, но и способствуют изучению основ программирования другими трейдерами. Так как зачастую профи- программисты не вводят в сущность экспертов трейдеров, а просто за написания кодов( с рядом недочётов и ошибок) только снимают бабки.
 

Vseslav

Новичок форума
ТрэйлингСтоп

А написанный скрипт трэлингстоп изменит все ордера(при выполненном условии), даже если его в другое окно другой валютной пары добавить?
 

hoz

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

Во-первых, скрипт не добавляют, а кидают на график. В принципе, перебор ордеров делается по всем ордерам. Если условиями не ограничивать количество инструментов, то будут модифицироваться все ордера всех графиков.
 

oleglt

Интересующийся
<...>

ЗАДАЧИ. Понять что я написал в скрипте и без помощи форума написать похожий скрипт(с другими названиями и значениями переменных). Указать значение переменной(2-ое объяснение).
<...>

урок 5. а каким образом работает этот скрипт? Т.е. как и где выполняются расчеты?
 

sochinik

Местный житель
Если погуглить и пообщаться с трейдерами, то практически ВИДЕОУРОКИ ПО MQL можно найти и бесплатно, у меня собрана целая подборка уроков по програмированию, но практически их все можно просмотреть на ютубе, а для правильного сгрупирования даю ссылку где они представлены в последовательном порядке.Не знаю может это нарушение форума, но я нечего не преследую, а просто из своих поисков то что нашёл полезное. Практически там есть все основы для понимания програмирования на MQL :

_https://sites.google.com/site/videourokiforeks/home
 

eevviill

Заблокирован
Урок 21(видео) - Вставка функции (трейлинг стоп)

Речь(?) пойдёт о том как втавить готовую пользовательскую функцию трейлинг стопа в советник. Таким же образом можно прицеплять другие функции.

Условно(?) мы поделили код на 3 части.

1) Глобальные переменные. Это та часть кода где пишутся переменные которые вы будете видеть в настройках(упрощенно). В нашем случае мы записали в глобальные переменные настройки трейлинг стопа.
2) Функция Старт. Это главное что есть в советнике. Всё что внутри этой функции выполняется при каждом новом тике котировок. Сюда мы записали с самого начала условие и ссылку на пользовательскую функцию Трейлинг стоп.
3) В конце, после функции Старт я(все?) обычно пишу сам код пользовательских функций.

Всё! Тоесть грубо говоря нам надо скопировать настройки ссылку и функцию.

P.S. В самой функции надо поставить меджик(переменную) который стоит в глобальных переменных. Если нету там(как у нас) то надо смотреть что за число стоит в функции открытия ордера.
P.S.2. В конце менял point на Point, так как это относится к другому.

 

Вложения

  • Shabl (9).mq4
    18,1 КБ · Просмотры: 78
Последнее редактирование:

77павел

Почетный гражданин
у меня вопрос если можно есть ли время и возможность у вас вернутся назад к началу и как бы для меня и мне подобных( гуру языка мт4 ) поподробней описать можно даже с иллюстрациями с самого начала пройти этот путь в написании хотя бы индикатора почему прошу так вот сделать для меня !! я сам методом тыка пробовал менять параметры индикаторов и цвета нада сказать посидев пару ночей научилось находить менять итд так вот исследуя дальше в том же духе мето едитор я на шол как изначально создавать шаблон и попятьже опытнум путём понял что там же и цвета задаютя и какой индикатор будет на самом графике или в подвале итд если я конечно всё правильно понял так мне всётаки сперва лучше с созданием щаблона разобратся как то так вобщем
 
Верх