Перейти к содержанию

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


Рекомендуемые сообщения

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

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

ema_stop_2=iMA(Symbol(),NULL,10,0,MODE_EMA,PRICE_LOW,1);
SL=NormalizeDouble(ema_stop_2-Stoploss*Point,Digits);
так вот количество пунктов я не знаю,мне нужно их посчитать,умножить на 2 для установки тейк профита.

Изменено пользователем denis77515
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

Здравствуйте уважаемый xbms и остальные форумчане.
Может кто сталкивался с такой проблемой. Написал индикатор, и он жрет у меня 900 мб. памяти. Я решил выяснить какой именно элемент кода дает такую утечку, нашел (обозначено Суть кода: он закачивает с истории из (BarsNomber) свечей цены O, C, H, L. Но чего он потом не выгружает эту информацию из памяти??????????!!!!!!!!!
Посмотрел последний вебинар от Вас, уважаемый xbms (отдельное спасибо, уроки очень толковые, очень помогают), Вы рассказывали про классы. В справке написано, что через классы как-то решается проблема с освобождением памяти. Подскажите, как можно решить обозначенную проблему. Заранее спасибо.
P.S. Я запускал индикатор в WinXP и Win7. Так в XP все нормально (что-то около 5 mb), а в Win7 - 900 mb.

Спойлер


int init()
{
int TimeFrame [8];
TimeFrame
TimeFrame [0] = PERIOD_M1; TimeFrame [1] = PERIOD_M5; TimeFrame [2] = PERIOD_M15; TimeFrame [3] = PERIOD_M30;
TimeFrame [4] = PERIOD_H1; TimeFrame [5] = PERIOD_H4; TimeFrame [6] = PERIOD_D1; TimeFrame [7] = PERIOD_W1;
for (int i = 0; i {
Ever = MX(TimeFrame ,UpOrDown);
if (Ever == 0)Comment(i);
}
return(0);
}
//+------------------------------------------------------------------+
double MX(int TimeFrameMines, int UP_DOWN)
{
for (int i = 1; i {
H[i-1] = iHigh(NULL,TimeFrameMines,i); // L[i-1] = iLow(NULL,TimeFrameMines,i); // O[i-1] = iOpen(NULL,TimeFrameMines,i); // C[i-1] = iClose(NULL,TimeFrameMines,i); // if (O[i-1] if (O[i-1]>C[i-1] && UP_DOWN == 1) {EverX += (H[i-1]-L[i-1]);Count++;}
}
if (Count == 0)return(0);
return(EverX/Count);
}


Изменено пользователем Slava2007
Ссылка на сообщение
Поделиться на другие сайты

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

может кто подсказать нужно что бы после каждой убыточной сделки следующий лот увеличивался а у меня когда бай и селл только после этого увеличивает лот

BBstop_bot.mq4

Ссылка на сообщение
Поделиться на другие сайты

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

Всем доброго вечера. Подскажите пожалуйста, где я ошибся. В домашнем задании к 3 уроку при создании стоп-ордеров стабильно выдаётся "OrderModify ошибка 130"(неправильные стопы).
Также выкладываю задание к второму уроку. Там при удалении некоторых ордеров выскакивает ошибка "OrderDelete ошибка 4108" (некорректный номер тикета).
Файл SampleExpert1 - задание к второму уроку.
Файл Test3(Indicator) - задание к третьему уроку.

Test3Indicator.mq4
SampleExpert1.mq4

Изменено пользователем NickWelder
Ссылка на сообщение
Поделиться на другие сайты

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

Доброго времени суток всем!
Подскажите по уроку № 3. Как добавить в код советника переменные :
extern int StartHour = 10; // час начала работы
extern int StartMinute = 0; // минуты начала работы
extern int EndHour = 14; // час окончания
extern int EndMinute = 0; // минуты окончания

Ссылка на сообщение
Поделиться на другие сайты

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

Например во так:

Спойлер

[/ if(HourStart == TimeHour(TimeCurrent()))

и

if(HourEnd == TimeHour(TimeCurrent()))] это при целых значениях времени ,если нужны минуты,то условие надо писать другое.

Ссылка на сообщение
Поделиться на другие сайты

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


Например во так:

Спойлер

[/ if(HourStart == TimeHour(TimeCurrent()))

и

if(HourEnd == TimeHour(TimeCurrent()))] это при целых значениях времени ,если нужны минуты,то условие надо писать другое.


Будте добры! подскажите как прописать что б советник торговал в определенное время?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Alekseevich, на форуме тьма советников, торгующих в разное время.

Изучайте чужих ботов, смотрите что как другие люди делали.

Учитесь исключительно самостоятельно.
Даже и не думайте, что кто-то вместо вас будет писать за вас программы или искать ваши ошибки.
На форуме 1 программист на 3000-5000 торгующих и все программисты крайне заняты.
Ссылка на сообщение
Поделиться на другие сайты

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

Всем добрый вечер. Во время выполнения домашнего задания к 4 уроку столкнулся с трудностью: при тестировании советника появляется ошибка "деление на ноль" и соответственно тестирование завершается. Алгоритм функции ModifyOrders() проверял, на первый взгляд всё верно. У самого не получается найти ошибку, поэтому прошу Вашей помощи. Выкладываю файл с выполненным домашним заданием из пункта 1.

Martin.mq4

Ссылка на сообщение
Поделиться на другие сайты

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

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

...может кто-то уже говорил такое... :-$


Добавлено: 16-04-2014 19:29:05

8-> не зря начинают обучение с блок-схем.... язык программирования - это уже инструмент.... Изменено пользователем fv2500
Ссылка на сообщение
Поделиться на другие сайты

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



Например во так:

Спойлер

[/ if(HourStart == TimeHour(TimeCurrent()))

и

if(HourEnd == TimeHour(TimeCurrent()))] это при целых значениях времени ,если нужны минуты,то условие надо писать другое.


Будте добры! подскажите как прописать что б советник торговал в определенное время?

extern bool Hvkl = true;
вот держи: if ((Hvkl == true && (Hour() >= HaurStart && Hour()
Ссылка на сообщение
Поделиться на другие сайты

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

extern bool Hvkl = true;
вот держи: if ((Hvkl == true && (Hour() >= HaurStart && Hour()
Не получается, где ошибка?




extern bool Hvkl = true; // включение проверки времени
extern int StartHour = 5; // час начала времени
extern int EndHour = 9; // час окончания времени




int ticket, otype;
double TP, SL, price, PriceHigh, PriceLow ;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
// Если брокер работает с 5-ю цифрами
if (Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
StopLoss *= 10;


}

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if ((Hvkl == true && (Hour() >= StartHour && Hour() PriceHigh = iCustom(Symbol(), 0, "TMA with Distances", TimeFrame, HalfLength, Price,ATRMultiplier,ATRPeriod,Interpolate, 1, 0); //значение верхней линии
PriceLow = iCustom(Symbol(), 0, "TMA with Distances", TimeFrame, HalfLength, Price,ATRMultiplier,ATRPeriod,Interpolate, 2, 0); //значение нижней линии

// покупка
if (Ask {
SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue);
if(ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)== true)
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);
}
}
// продажа
if (Bid >= PriceHigh && CountSell()== 0 )
{
SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);


ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red);
if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);
}
}



return(0);
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for(int trade =OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); // MODE_TRADES - ьюцэю эх яшёрЄ№
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
count++;
}
}

return (count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int trade =OrdersTotal()-1; trade >=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); // MODE_TRADES - ьюцэю эх яшёрЄ№
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
count++;
}
}

return(count);
}
Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день!
Помогите найти ошибку - не модифицируется ордер. ;;)
В журнале ошибка 130

P.S. Всё перепроверила несколько раз и не могу понять в чем причина!

17.04_raschet_sl.mq4

Ссылка на сообщение
Поделиться на другие сайты

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


Добрый день!
Помогите найти ошибку - не модифицируется ордер. ;;)
В журнале ошибка 130

P.S. Всё перепроверила несколько раз и не могу понять в чем причина!


Не модифицируется из за вот этой строчки TP = NormalizeDouble(SL*1.5, Digits);нужно посчитать количество пунктов от цены открытия до стоп лосса ,а потом только умножить на некое число.к сожалению я сам не знаю как это сделать.Пока не кто не подсказал.

Ссылка на сообщение
Поделиться на другие сайты

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


Добрый день!
Помогите найти ошибку - не модифицируется ордер. ;;)
В журнале ошибка 130
P.S. Всё перепроверила несколько раз и не могу понять в чем причина!


Ордер на продажу (OP_SELL), SL = dHigh, а вы хотите ТП сделать выше SL. Само собой такой приказ сервер принять не может. Так-же желательна проверка не слишком ли близко SL к текущей цене.
Ссылка на сообщение
Поделиться на другие сайты

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

Привет
Помогите мне решить задачу
она такая:
1. Когда RSI()>=Х (установленного уровня) - поставить SELLLIMIT Y пункт выше тек.
или наоборот
2. Когда RSI()
extern double Lots = 0.01;
extern double StopLoss = 100;
extern double TakeProfit = 300;
extern int Distance = 50;
extern int Slippage = 3;
extern string comment = "Alert_RSI_Bot";
extern int magic = 777;
extern double BuyRSIPoint = 15;
extern double SellRSIPoint = 85;
extern int InpRSIPeriod = 14;

int i=0;
int ticket;
double price, BL_Price, SL_Price, TP, SL;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits==3||Digits==5)
{
Slippage *=10;
Distance *=10;
StopLoss *=10;
TakeProfit *=10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(BuyRSIPoint >=iCustom(Symbol(),0,"RSI",InpRSIPeriod,0,i) && CountBuyLimit()==0)
{
BL_Price = Ask - Distance;
ticket = OrderSend(Symbol(), OP_BUYLIMIT, Lots, BL_Price, Slippage, 0, 0, comment, magic, 0, Blue);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET, MODE_TRADES)==true)
{
SL = NormalizeDouble(OrderOpenPrice()-StopLoss*Point,Digits);
TP = NormalizeDouble(OrderOpenPrice()+TakeProfit*Point,Digits);
OrderModify(ticket,OrderOpenPrice(),SL,TP,0,0);
}
}
//Alert ("BUY");
//Print("Buy", Symbol(), "RSI }
//+---------------------------
if(SellRSIPoint {
SL_Price = Bid+Distance;
ticket=OrderSend(NULL,OP_SELLLIMIT,Lots,SL_Price,Slippage,0,0,comment,magic,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
{
SL = NormalizeDouble(OrderOpenPrice()+StopLoss*Point,Digits);
TP = NormalizeDouble(OrderOpenPrice()-TakeProfit*Point,Digits);
OrderModify(ticket,OrderOpenPrice(),SL,TP,0,0);
}
}
}
//Alert ("BUY");
//Print("Buy", Symbol(), "RSI }
//+------------------------------------------------------------------+
int CountSellLimit()
{
int count=0;
for(int trade = OrdersTotal()-1; trade>=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic)
if(OrderType() == OP_SELLLIMIT) count++;
}
return(count);
}
//+------------------------------------------------------------------+
int CountBuyLimit()
{
int count=0;
for(int trade = OrdersTotal()-1; trade>=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic)
if(OrderType() == OP_SELLLIMIT) count++;
}
return(count);
}

Ссылка на сообщение
Поделиться на другие сайты

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


kamolkurbonov, на первый взгляд, CountBuyLimit у тебя считает SellLimit-ы.
А так в чём требуется помощь?



копи-паст рулит...
ничего страшного, так часто бывает :)
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день, как обойти максимальный объем лотов установленный в ДЦ, спасибо!
Общий объем нужно дробить на объемы которые позволяет устанавливать ДЦ, но как это написать не понимаю, новичек, если это бональщина то извините :d

Ссылка на сообщение
Поделиться на другие сайты

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

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...