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

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

Rennela

Новичок форума
Решил научиться программировать на MQL4. Начал со скрипта и захожу в тупик. Ребята,если не трудно,подскажите в чем ошибка?При компиляции ошибок нет,но при запуске выдает ошибку 130. Удалял поочередно стоплосс и тейкпрофит. Со стопом запускается, а с тейком выдает ошибку.Нормализовал цену:double TP=NormalizeDouble(Bid+StopLoss*Point,Digits);обновлял данные-все тоже.Что не так?
//----------------------------------------------------------------------
int start()
{
int StopLoss=500;
int TakeProfit=1000;
int Delta_start=600;
string Symb=Symbol();
//------------------------------------------------------------------------------------
while(True)
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);
if(StopLoss<Min_Dist)
{
StopLoss=Min_Dist;
Alert("Увеличена дистанция StopLoss");
}
double SL=Bid-StopLoss*Point;
if(TakeProfit<Min_Dist)
{
TakeProfit=Min_Dist;
Alert("Увеличена дистанция TakeProfit");
}
double TP=Bid+TakeProfit*Point;
int Ticket_Buy=OrderSend(Symb, OP_BUYSTOP, 0.01,Ask+Delta_start*Point,0,SL,TP);
Alert(GetLastError());
break;
}
return(0);
}
//------------------------------------------------------------------------------------
 

alexshell

Элитный участник
Решил научиться программировать на MQL4. Начал со скрипта и захожу в тупик. Ребята,если не трудно,подскажите в чем ошибка?При компиляции ошибок нет,но при запуске выдает ошибку 130. Удалял поочередно стоплосс и тейкпрофит. Со стопом запускается, а с тейком выдает ошибку.Нормализовал цену:double TP=NormalizeDouble(Bid+StopLoss*Point,Digits);обновлял данные-все тоже.Что не так?
//----------------------------------------------------------------------
int start()
{
int StopLoss=500;
int TakeProfit=1000;
int Delta_start=600;
string Symb=Symbol();
//------------------------------------------------------------------------------------
while(True)
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);
if(StopLoss<Min_Dist)
{
StopLoss=Min_Dist;
Alert("Увеличена дистанция StopLoss");
}
double SL=Bid-StopLoss*Point;
if(TakeProfit<Min_Dist)
{
TakeProfit=Min_Dist;
Alert("Увеличена дистанция TakeProfit");
}
double TP=Bid+TakeProfit*Point;
int Ticket_Buy=OrderSend(Symb, OP_BUYSTOP, 0.01,Ask+Delta_start*Point,0,SL,TP);
Alert(GetLastError());
break;
}
return(0);
}
//------------------------------------------------------------------------------------
Ну все правильно ошибку выдает. байстоп ставите по цене выше текущей на Delta_start , а стоплосс и такепрофит почему то считаете от текущей цены. Вот такепрофит и оказывается скорее всего ниже цены установки ордера или слишком близко к цене установки.
 
Последнее редактирование:

Rennela

Новичок форума
Ну все правильно ошибку выдает. байстоп ставите по цене выше текущей на Delta_start , а стоплосс и такепрофит почему то считаете от текущей цены. Вот такепрофит и оказывается скорее всего ниже цены установки ордера или слишком близко к цене установки.

Спасибо. Переделал.Работает.:D
 

cudahar

Новичок форума
Что такое " расширение " что такое " скрипты " " кампиляция "
 

Ugar

Гуру форума
Что такое " расширение " что такое " скрипты " " кампиляция "
Я бы посоветовал в терминале нажать кнопку F1. Но тут вопрос о расширении, похоже надо начинать с книжки "компьютер для чайников".
 
Последнее редактирование:

cudahar

Новичок форума
Ладно , попробую почитать про кампиляцию , а вот интересно , при написании программы как комьютер воспринимает ПРОБЕЛ ? точнее длину пробела ? Если пробел будет длиною в один клик , в два , в три клика - это одно и то же или по разному будет восприниматься компьюбтером ?
 

Ugar

Гуру форума
Ладно , попробую почитать про кампиляцию , а вот интересно , при написании программы как комьютер воспринимает ПРОБЕЛ ? точнее длину пробела ? Если пробел будет длиною в один клик , в два , в три клика - это одно и то же или по разному будет восприниматься компьюбтером ?
Пробел имеет большое значение, а его длина не имеет значения.
 

cudahar

Новичок форума
Да , именно длина пробела меня и интересовала . То есть к примеру " абвгд " ЛИБО " а б в г д " будет воспринято компьютером одинаково ? Разумеется ковычки не в счёт " ЛИБО " тоже не в счёт
 

Ugar

Гуру форума
Да , именно длина пробела меня и интересовала . То есть к примеру " абвгд " ЛИБО " а б в г д " будет воспринято компьютером одинаково ? Разумеется ковычки не в счёт " ЛИБО " тоже не в счёт
Нет.
Код:
Expand Collapse Copy
абвгд
и
Код:
Expand Collapse Copy
а б в г д
совершенно разное. Наличие пробела важно.
А вот
Код:
Expand Collapse Copy
а б в г д
и
Код:
Expand Collapse Copy
а  б  в    г   д
и даже
Код:
Expand Collapse Copy
а б 
в г     д
то же самое
 
Последнее редактирование:

cudahar

Новичок форума
Мисстика ..................шаг влево . шаг вправо - попытка к бегству
 

cudahar

Новичок форума
Что интересно , при написании текста или как там КОДА .............а б в г д е ё ж з ..........я ставлю длинные пробелы . а компьютер . после отправки , их сам укорачивает до одного пробела . ну да ладно . раз это не имеет значение . Мне интересно а на демоверсии будет работать советник ? Или он только на реале работает ?
 

Buldakov

Местный житель
Не могу найти функцию, которая показывает уровень маржи по открытым позициям в процентах.
Например есть 3 советника, которые торгуют одновременно. Если уровень маржи стал меньше заданного значения (например 2000%) - то советник не откроет новую сделку.
 

alexshell

Элитный участник
Не могу найти функцию, которая показывает уровень маржи по открытым позициям в процентах.
Например есть 3 советника, которые торгуют одновременно. Если уровень маржи стал меньше заданного значения (например 2000%) - то советник не откроет новую сделку.
Уровень = AccountEquity( ) / AccountMargin( ) * 100;
Да и учтите, что эта формула при отсутствии открытых позиций дает деление на ноль. Как с этим бороться, думаю для вас не проблема.
 
Последнее редактирование:

Buldakov

Местный житель
Да. все попробовал. и получилось.
Формула уровня маржи выглядит примерно так:
double Level=(100*AccountEquity())/(MathAbs(AccountEquity()-AccountFreeMargin())+0.1);
 

progenitor

Прохожий
боллинджер

Приветствую!

А можно ли где найти код стандартного боллинджера т.е. все расчеты в одном индикаторе. стандартный iBands не видно как считает. Популярный Bands.mq4 тоже не полностью описан в одном файле т.к. ссылается на внешний #include <MovingAverages.mqh>
 

_SERG_

Активный участник
Приветствую!

А можно ли где найти код стандартного боллинджера т.е. все расчеты в одном индикаторе. стандартный iBands не видно как считает. Популярный Bands.mq4 тоже не полностью описан в одном файле т.к. ссылается на внешний #include <MovingAverages.mqh>

Он не ссылается, а включает текст файла MovingAverages.mqh в том месте где написана директива #include. Разницу уловил?
 

Ugar

Гуру форума
Приветствую!

А можно ли где найти код стандартного боллинджера т.е. все расчеты в одном индикаторе. стандартный iBands не видно как считает. Популярный Bands.mq4 тоже не полностью описан в одном файле т.к. ссылается на внешний #include <MovingAverages.mqh>
Конверт Боллинжера состоит из SMA и Standard Deviation с одинаковыми периодами по Close. Средняя линия SMA. Верхняя линия SMA+Standard Deviation* Deviation. Нижняя SMA-Standard Deviation* Deviation.
Deviation - входной параметр.
 

kaiske

Активный участник
СКОЛЬКО ВРЕМЕНИ НУЖНО С НУЛЯ ДО МАСТЕРА ДЕЛАТЬ ИНДИКАТОРЫ И СОВЕТНИКИ?
 
Верх