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

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


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

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

Уважаемый Vorchunozavr , куда эту строчку воткнуть ? Я его накорябал с готовых рабочих советников, и благодоря урокам,но пока еще не могу уловить как самостоятельно написать то или иное условие.По этому прошу помощи,мне увидеть надо что я сделал не правильно или не дописал.

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

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

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

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

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

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

Перейти

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

Перейти

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

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

//+------------------------------------------------------------------+
void Tralling()
{
for (int i=0; i {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrallingStop * Point)
{
if(OrderStopLoss() {
Sl = NormalizeDouble(Bid - TrallingStop * Point,Digits);
if(OrderStopLoss() !=Sl)
OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0); //-- Здесь
}
}
}
if(OrderType() == OP_SELL)
{
if(Ask - OrderOpenPrice() > TrallingStop * Point)
{
if(OrderStopLoss() > Ask+(TrallingStop + TrallingStep) * Point)
{
Sl = NormalizeDouble(Ask + TrallingStop * Point,Digits);
if(OrderStopLoss() !=Sl)
OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0); //-- и здесь
}
}
}
}
}
}
}
//+------------------------------------------------------------------+


Программе нужно сказать, что мы тейк профит оставляем прежний, т.е. - OrderTakeProfit(). Если поставить 0, она TP уберёт, потому:
Цитата

исчезает тейк профит

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

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

А есть возможность и время если не затруднит написать простенький советник сигнальщик? Чтоб сигналил на втором баре при изменении тренда. Даже есть образец только индикатор поменять надо.

trend.jpg
MA_Gudok.mq4
Trend~.mq4

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

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

Уважаемый Vorchunozavr Спасибо за код. Еще просьба посмотри почему он ордера не удаляет в указанное время ?

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
denis77515
По коду: если пришло время и если имеем 2 ордера, один бай или селл, другой отложенный, то отложенник должен удалиться.

А зачем мы проверяем количество ордеров? И если рыночный закрылся по профиту или СЛ?
Если нам нужно просто удалить ордера, лучше без лишних условий: время пришло и мэджик наш - удаляем (в конце второго урока это есть).
:)
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте xbms.
Если уроки по программированию ещё не закончены, то хочу предложить написать очень полезный индикатор. Это будет индикатор определения флета. Этот индикатор может быть использован для исследования рынка, а также для более точного входа в рынок при трендовых стратегиях. Мы задаём всего два переменных параметра, это ширина флета и величина выхода цены в пунктах из канала флета, при которой будем считать данный флет законченным. Такой участок флета должен быть графически отмечен на графике и иметь информацию о том, сколько раз цена сходила от стенки до стенки канала. Это на истории. Текущий флет также должен быть выделен графически и иметь информацию о количестве уже пройденных колен. Этот индикатор нам поможет выявить на истории такие закономерности появления флета заданной ширины, как время, уровни, частоту, количество колен, оптимальную ширину и т.д. Измерение текущего флета позволит войти в рынок на несколько колен позже по известной цене и направлению.
С уважением turu.

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

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

Доброго времени, господа программисты.Помогите разобраться с таким делом при тестировании в журнале выдает OrderModify error 130 еще бывает ошибка 4108 и последние что я увидел это OrderModify error 1.Посмотрите код,помогите исправить этот недостаток ПЛИЗ ;)


Добавлено: 19-09-2013 17:21:01

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

Test_21.mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
denis77515
if((maxprice+Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD))
OrderSend(Symbol(),OP_BUYSTOP,Lots,maxprice,Slippage,Sl,TP,"",Magic,0,Blue);

(maxprice+Ask)/Point - Это очень много и условие будет выполняться всегда.
(1,3560+1,3530)/0,0001=
Для SellStop тоже неправильно.

Трал:
У машины с интуицией туговато и условия if(OrderStopLoss() !=Sl) недостаточно. Если нам не нужно, чтобы СЛ снижался (для Бай), значит надо написать, что новый СЛ должен быть выше старого. И текущая цена не должна быть слишком близко...
Спойлер

 //+------------------------------------------------------------------+
void Tralling()
{
for (int i=0; i {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{

if(OrderType() == OP_BUY)
Sl = NormalizeDouble(GetMinPrice() - Indent * Point,Digits);
{
if(OrderStopLoss() !=Sl && OrderStopLoss() MarketInfo(Symbol(),MODE_SPREAD)*2)
OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0);
}

if(OrderType() == OP_SELL)
Sl = NormalizeDouble(GetMaxPrice() + Indent * Point,Digits);
{
if(OrderStopLoss() !=Sl && OrderStopLoss() > Sl && (Sl - Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD)*2)
OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0);
}
}
}
}
}
//+------------------------------------------------------------------+
Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо за трелинг,а как это исправить.Вернее правильно написать ?

if((maxprice+Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD))
OrderSend(Symbol(),OP_BUYSTOP,Lots,maxprice,Slippage,Sl,TP,"",Magic,0,Blue);

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано (изменено)
denis77515
Старайтесь писать комментарии к функциям, условиям и т.п. Например:
if((maxprice+Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD))   // Проверяем где находится текущая цена относительно
// нашего BUYSTOP, если цена выше или слишком
// близко (уровень спреда) - ордер не установится.
OrderSend(Symbol(),OP_BUYSTOP,Lots,maxprice,Slippage,Sl,TP,"",Magic,0,Blue);

Написано почти правильно, только для BUYSTOP надо if(Ask ,
а для SELLSTOP if((Bid > minprice + MarketInfo(Symbol(),MODE_SPREAD)*2*Point).
Изменено пользователем Vorchunozavr
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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


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



Привет!
Рекомендую заглянуть сюда: http://tradelikeapro.ru/izuchaem-mql-urok-n-2-tsiklyi-funktsii-i-ordera-v-sovetnike/

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

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

Спасибо Vorchunozavr за подсказку,еще такая вещь как научить советника закрывать ордер частями,например достиг опоределенного количества пунктов,закрыл часть,достиг еще,опять закрыл,а третья часть либо стопу,либо тейку закроется.научите,покажите люди ????? :d

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
denis77515
Написать могу, научить - сложнее :)
Обычный OrderClose, только вписать какой объём закрываешь.
Лучше оформить как функцию.
Во внешние переменные LotsClose, Profit_1, Profit_2 (Если Lots=0,1, то LotsClose=0,03. Профиты в пунктах, если есть проверка на знаки, то их тоже множим...)

Спойлер

//+------------------------------------------------------------------+
void PartClose()
{ for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderLots() {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if ((Bid - OrderOpenPrice())/Point >= Profit_1 && OrderLots() > Lots - LotsClose)
OrderClose(OrderTicket(), LotsClose, Bid, Slippage);

if ((Bid - OrderOpenPrice())/Point >= Profit_2 && OrderLots() > Lots - LotsClose*2)
OrderClose(OrderTicket(), LotsClose, Bid, Slippage);
}

if (OrderType() == OP_SELL)
{
if ((OrderOpenPrice() - Ask)/Point >= Profit_1 && OrderLots() > Lots - LotsClose)
OrderClose(OrderTicket(), LotsClose, Ask, Slippage);

if ((OrderOpenPrice() - Ask)/Point >= Profit_2 && OrderLots() > Lots - LotsClose*2)
OrderClose(OrderTicket(), LotsClose, Ask, Slippage);
}
}
}
}
}
}
//+------------------------------------------------------------------+

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

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

Вопрос уважаемым программистам. Как заставить советник торговать на offline М2 графике ренко (график генерируется индикатором RenkoLiveChart v2.1) ?

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

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

[quote


Привет Серега.Прежде хочу поблагодарить тебя и всю вашу команду за ваши труды.Уроки несомненно полезные, но мне кажется , что надо немного добавить примеров , например пример на пересечении скользящих средних, пример для стрелочных индикаторов, и потом как их совместить и создать условие для входа от нескольких индикаторов, то есть сделать, что-то наподобие шаблонов, чтобы в них потом можно было бы вписывать только параметры индикаторов.Я новичок в этом деле но мне кажется такому варианту были бы рады многие начинаюсчие трейдеры которые хотят создать свой советник. Но а теперь хочу обратится за помощью, никак не могу найти в чем ошибка .Из твоих уроков Сергей я взял код для советника построенный на индикаторе ТМА и решил к нему дабавить мартин, результат такой , что на покупку работает идеально , а вот на продажу почему то открываются ордера с каждым тиком нннннннн-количество штук пока не исчерпает весь депозит если нетрудно не сможешь помочь с этой проблемой , вот код




//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| TMA.mq4 |
//|
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "

extern double Lots = 0.1;
extern int TakeProfit = 10;
extern int StopLose = 100;
extern int Slippage = 5;
extern string comment = "TMA BOT";
extern int Megic = 111;
extern string Indi = "Данные индикатора";
extern string TimeFrame = "current time frame";
extern int HalfLength = 34;
extern int Price = PRICE_CLOSE;
extern double ATRMultiplier = 1.0;
extern int ATRPeriod = 100;
extern bool Interpolate = true;
extern int Step = 10;
extern double Multiplier = 1;



double PriceHigh, PriceLow, SL, TP, price, lastlot;

int ticket;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if (Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
Step *= 10;
Slippage *= 10;
StopLose *= 10;
}

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{



return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
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 (Bid >= PriceHigh && CountSell() == 0)
{
SL = NormalizeDouble(Bid + StopLose * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);

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

}
}

if (Ask {
SL = NormalizeDouble(Ask - StopLose * Point, Digits);
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);

ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Megic, 0, Blue);
if (ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (ticket, OrderOpenPrice(), SL, TP, 0);
}

}



else
{
int order_type = FindLastOrderType();
if (order_type == OP_BUY)
{
price = FindLastPrice(OP_BUY);
if(Ask {
lastlot = FindLastLots(OP_BUY);
lastlot = NormalizeDouble(lastlot * Multiplier, 2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Megic, 0, Blue);
if (ticket > 0)
ModifyOrders(OP_BUY);
}
}
else if (order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL);
if(Bid {
lastlot = FindLastLots(OP_SELL);
lastlot = NormalizeDouble (lastlot * Multiplier, 2);
ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Megic, 0, Red);
if (ticket > 0)
ModifyOrders(OP_SELL);
}
}
}

return(0);
}
//+------------------------------------------------------------------+

int CountSell()
{
int Count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Megic)
{
if (OrderType() == OP_SELL)
Count ++;
}
}

return(Count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
int Count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Megic)
{
if (OrderType() == OP_BUY)
Count++;
}
}
return(Count);
}

//+------------------------------------------------------------------+

//+-----------------------------------------------------------------
void ModifyOrders(int otype)
{
double avgprice = 0,
order_lots = 0;

price = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
}

avgprice = NormalizeDouble(price / order_lots, Digits);

if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point, Digits);
if (otype == OP_SELL) TP = NormalizeDouble(avgprice -TakeProfit*Point, Digits);

for (i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype)
OrderModify(OrderTicket(),OrderOpenPrice(), 0, TP, 0, Red);
}
}
return(avgprice);


}
//+------------------------------------------------------------------+
double FindLastPrice(int otype)
{
double oldopenprice;
int oldticket;

ticket = 0;

for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldopenprice = OrderOpenPrice();
ticket = oldticket;
}
}
}
}
return(oldopenprice);
}

//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
double oldlots;
int oldticket;

ticket = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}
}
}
}
return(oldlots);
}
//+------------------------------------------------------------------+

int FindLastOrderType()
{
for (int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Megic)
return(OrderType());
}
}
return(-1);
}
//+------------------------------------------------------------------+
int CountTrades()
{
int count = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Megic)
count++;
}
}
return(count);
}








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

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


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


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


andrei22
И еще неплохо было бы спрятать код под спойлер. ;)
А то неудобно читать и цитировать.
Ссылка на сообщение
Поделиться на другие сайты

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


andrei22
И еще неплохо было бы спрятать код под спойлер. ;)
А то неудобно читать и цитировать.

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

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

Подскажите, возможно ли использовать внешние скрипты в советнике через Include или как либо еще, чтоб постоянно код не писать скинул ссылку на действие и все?

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

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

Ошибка в условии:

Большое спасибо!!!

Добавлено: 27-09-2013 16:59:48


denis77515
Здравствуйте. Вы вчера помогли мне найти ошибку в моем коде и все заработало спасибо. Кстате получился очень крутой робот (круче чем "Авто профит" и " Илан") за 3 дня на тестере эти роботы заработали примерно по 30$ со 100 $ c лотом в 0,01, а мой робот смог приодалеть рубеж в 202 $ но для полного успеха не хватает одной детали. Может сможете помочь мне немного изменить код? Там надо сделать чтобы он открывал позиции не по индикатору ТМА , а после каждого закрытого бара, то-есть если ордер закрывается по тейк профиту , то после закрытия бара открывается следуюсщий ну подробности позже. Так как?

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

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


andrei22
Инструкция там: http://tlap.com/forum/forum-trade-like-a-pro/14/bolshoe-faq-po-forumu/2421

Ошибка в условии:

if(Bid 



А что не так, ни как не пойму( если не трудно укажите.

Добавлено: 28-09-2013 01:26:39

if(Bid >=price + Step * Point)

Так чтоли?

Добавлено: 28-09-2013 01:32:52

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

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(CountTrades() == 0)
{
GetSignal();

if (Signal > 0 )
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, " ", Magic, 0, Blue);

if(ticket > 0)
{
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}
}
if (Signal {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, " ", Magic, 0, Red);

if(ticket > 0)
{
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}
}
}
if(CountTrades() > 0 && CountTrades() {
int order_type = FindLastOrderType();
if(order_type == OP_BUY)
{
price = FindLastPrice(OP_BUY);
if(Ask {
lastlot = FindLastLots(OP_BUY);
if (lastlot lastlot = NormalizeDouble(lastlot * Multipler, 2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic,0, Blue);
if(ticket > 0)
ModifyOrders(OP_BUY);

}
}
if (order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL);
if(Bid >= price + Step * Point)
{
lastlot = FindLastLots(OP_SELL);
if (lastlot lastlot = NormalizeDouble(lastlot * Multipler, 2);
ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic,0, Red);
}
if(ticket > 0)
ModifyOrders(OP_SELL);
}
}
/* if(TotalLoss() {
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
{
if (OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black);
}
}
}


} */





return(0);



}

//+------------------------------------------------------------------+
void GetSignal()
{
Signal = 0;

// - 1 - == Получение показаний индикатора ==============================================
double main1 = iCustom(NULL, 0, "Trend", 0, 1);
double main2 = iCustom(NULL, 0, "Trend", 0, 2);
double sign1 = iCustom(NULL, 0, "Trend", 1, 1);
double sign2 = iCustom(NULL, 0, "Trend", 1, 2);
// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала покупки ===================================================
if (main1 != EMPTY_VALUE && main2 != EMPTY_VALUE// Линия сменила цвет с красного на..
&& sign1 == EMPTY_VALUE && sign2 != EMPTY_VALUE)// ..голубой
Signal = 1;
// - 2 - == Окончание блока =============================================================

// - 3 - == Генерация сигнала продажи ===================================================
if (sign1 != EMPTY_VALUE && sign2 != EMPTY_VALUE// Линия сменила цвет с голубого на..
&& main1 == EMPTY_VALUE && main2 != EMPTY_VALUE)// .. красный
Signal = -1;
// - 3 - == Окончание блока =============================================================
}



ставлю эту строчку
Спойлер


if (Signal {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
{
if (OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black);
}}}


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

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


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

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

уважаемые форумчане. написал эксперт на основе внешнего индикатора... на валютных парах работает, а на золоте или нефти выдает OrderSend error 131 ... в чем может быть причина ???

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

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

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

Test_20.mq4

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

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

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

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

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

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

Войти

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

Войти

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


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

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