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

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


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

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


Здраствуйте ребята,вопросик таков. Можно сделать функцию что бы она открывала ордера по мартину в мультивалютном советнике ?
... например открыты 7 ордеров по разным валютным парам и в разных направлениях,мне нужно что бы при соответствующим условии то есть от показания индикатора он открывал точно такие же ордера по тем же парам в том же направлении но с увеличенным лотом.

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

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

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

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

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

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

Перейти

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

Перейти

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

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



открытый ордер остается единственным пока не сработает стоплосс или тп, только потом со следующей свечи открывается следующий ордер в зависимости от МА. и так далее
походу я начинаю догонять с открыванием ордеров, но тормозит меня открытия ордера после сработывания стоплосса????????

Узнать о Лосе просто:
- после успешного открытия ордера запоминаем oldBalans=AccountBalans();
- если количество ордеров = 0, смотрим if (oldBalans>AccountBalans()) - значит Лось.
Также советую идти простыми путями, например: после открытия очередного ордера запоминать его лот, прайс и всё, что Вам нужно, а не при каждом тике искать последний.

А если другие ордера на других например парах закроются? Баланс может стать меньше, хотя рассматриваемый ордер закроется по профиту.
Предлагаю запоминать стоплосс ордера, а после его закрытия сравнивать с ценой закрытия (с поправкой на проскальзывание).
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

подскажите пожалуйста что -то я в тупик зашел с этими ЛОСЯМИ, не открывает ордера по удвоенному лоту после стоплосса????????!!!!!!!!!

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

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


подскажите пожалуйста что -то я в тупик зашел с этими ЛОСЯМИ, не открывает ордера по удвоенному лоту после стоплосса????????!!!!!!!!!

1. Не вставляйте ваш код в пост! Нужно уважать других участников, кому это не интересно. Либо прикрепляйте файл, либо прячьте под спойлер.
2. Я Вам советовал написать алгоритм. - в коде логическая каша!
- зачем рассчитывать лот на каждом тике?
- oldOrderStopLoss = OrderStopLoss(); - это уровень (цена), а PRICE_CLOSE = 0 (это ценовая константа читать: здесь
т.е. в блок открытия ордера после Лося входа нет!
3. Похоже Вам надо написать алгоритм.
- 1. Если не новый бар - выходим.
- 2. Проверяем наличие открытого ордера.
- если есть - выходим.
- 3. Проверяем профит у последнего закрытого ордера (по тикету: OrderSelect(Ticket, SELECT_BY_TICKET, MODE_HISTORY))
- если (+) - Проверяем условие на вход, старт лот, определяем направление, входим
- если (-) - Увеличиваем лот, определяем направление, входим
- 4. Запоминаем последний тикет (тип, лот - по вкусу).
ВСЁ! - это будет работать. Перепишите заново (совет).
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

спасибо огромное

Добавлено: 23-06-2014 18:23:47

ничего не получается, кто сможет дописать советник за оплату???????????? Изменено пользователем stepa31101
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

кто может подсказать что я не так делаю нужно тралить все ордера одного направления
вот код:
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
void Trailing()
{
double avg = 0,
_lots = 0,
price_ = 0;
for (int i = OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
price_ += OrderOpenPrice() * OrderLots();
_lots += OrderLots();
}
}
}
avg = NormalizeDouble(price_ / _lots, Digits);

if (OrderType() == OP_BUY)
{
if (Bid - NormalizeDouble(avg, Digits) > tralstop)
{
if (Bid - OrderOpenPrice() > tralstop * Point + tralstep * Point)
{
if (OrderStopLoss() {
SL = NormalizeDouble(Bid - tralstop * Point, Digits);
if (OrderStopLoss() != SL)
if(OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0))
return;

}
}
}
}

if (OrderType() == OP_SELL)
{
if (NormalizeDouble(avg, Digits) - Ask > tralstop)
{
if (OrderOpenPrice() - Ask > tralstop * Point + tralstep * Point)
{
if (OrderStopLoss() > Ask + tralstop * Point)
{
SL = NormalizeDouble(Ask + tralstop * Point, Digits);
if (OrderStopLoss() != SL)
if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0))
return;

}
}
}
}





}

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

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


ничего не получается, кто сможет дописать советник за оплату???????

Вы считаете, что вложения отобьются? Пишите в личку. (здесь оффтоп)


кто может подсказать что я не так делаю нужно тралить все ордера одного направления

Да практически всё не так... У Вас нет алгоритма (плана).
- Вы в цикле рассчитываете параметры для вычисления уровня безубытка сетки ордеров.
- Потом вычисляете уровень безубытка: avg = NormalizeDouble(price_ / _lots, Digits);
- После пересчёта ордеров выбранным остаётся последний ордер и Вы его тралите.
Что не так? Если хотите тралить все ордера сетки по общему (одинаковому) СЛ, то надо опять цикл делать и ещё до цикла определяться с направлением (типом ордеров)
Ссылка на сообщение
Поделиться на другие сайты

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

понятно спасибо


Добавлено: 24-06-2014 14:44:19

по пробовал так не идет
код:
void Trailing( int otype)
{
double avgprice = 0,
order_lots = 0;
price = 0;

for (int i = 0; i {
if ( OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
}
avgprice = NormalizeDouble(price / order_lots, Digits);
if (otype == OP_BUY) SL = NormalizeDouble(avgprice - tralstop * Point, Digits);
if (otype == OP_SELL) SL = NormalizeDouble(avgprice + tralstop * Point, Digits);

for (i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
if(OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0));


}
}




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

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


по пробовал так не идет
код:

Спойлер


void Trailing( int otype)
{
double avgprice = 0,
order_lots = 0;
price = 0;

for (int i = 0; i {
if ( OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
}
avgprice = NormalizeDouble(price / order_lots, Digits);
if (otype == OP_BUY) SL = NormalizeDouble(avgprice - tralstop * Point, Digits);
if (otype == OP_SELL) SL = NormalizeDouble(avgprice + tralstop * Point, Digits);

for (i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
if(OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0));


}
}




}



Делайте код под спойлером - как я сейчас сделал. (читайте правила форума)
У Вас логическая ошибка: Вы вычисляете не динамический, а статический СЛ! - ведь уровень БУ не меняется.
В предыдущем варианте было нормально, только надо было цикл по ордерам добавить после вычисления уровня БУ.
Ссылка на сообщение
Поделиться на другие сайты

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

0ll Спасибо за участие,сейчас не много не когда.Через пару дней свободней будет.Потом и обсудим.

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

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

Здравствуйте! У меня опять беда. Вот в 3-м уроке Сергей вводит две переменные: double PriceHigs, PriceLow, SL, TP;
Но у него-то мувинги. А у меня гистограмма. Надо чтобы при смене цвета открывались ордера. Что мне писать double..............? Подскажите пожалуйста. :((


Добавлено: 25-06-2014 17:58:34

А вообще, может есть советник на такой идикатор? Надо чтоб как только поменялся цвет-сразу открылся ордер. При достижении N пунктов закрылся 0.5 ордера, потом N2 пунктов-закрылась вторая половина. При смене цвета всё закрылось и открылся ордер в другую сторону. Для кого-то это легко, а я с моим даром программирования буду ещё лет 30 изобретать велосипед. Мож в готовый советник подставить получиться. Помогите кто чем может. Изменено пользователем Aleksey983
Ссылка на сообщение
Поделиться на другие сайты

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


Сергей вводит две переменные: double PriceHigs, PriceLow, SL, TP;

- 4 ????

Надо чтобы при смене цвета открывались ордера. Что мне писать double..............?

В индюке разный цвет линий в разных буферах.
Ответа Сергея можно ждать долго... А я не смотрел его уроки (и не буду - времени нет) Поэтому на догадках: в double ничего писать не надо. Ищите вызов индикатора (iMA) и там вставляйте свой (как вставить ищите в справке или код прикрепите)
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте! Спасибо,что откликнулись. Код я уже писал в ответ #916. Надо ввести переменные: double ???, ???, TP,SL. В int start()
{
??????? = iCustom(Symbol(), 0, "TheSecret Trend Reversal", ADX_period, MOM_period , MACD_fast_ema, MACD_slow_ema, MACD_signal_period, MaxBarsOnGraph, 0, 0);
В индюке разный цвет линий в разных буферах.
Ответа Сергея можно ждать долго... А я не смотрел его уроки (и не буду - времени нет) Поэтому на догадках: в double ничего писать не надо. Ищите вызов индикатора (iMA) и там вставляйте свой (как вставить ищите в справке или код прикрепите)

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

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


Надо ввести переменные: double ???, ???, TP,SL. В int start()
{
??????? = iCustom(Symbol(), 0, "TheSecret Trend Reversal", ADX_period, MOM_period , MACD_fast_ema, MACD_slow_ema, MACD_signal_period, MaxBarsOnGraph, 0, 0);

Понятно теперь.
В double пишите что хотите, например: "мой_индюк_буф0".
В вызове индюка iCustom предпоследняя цифра - номер буфера (выделил).
Вообще надо-бы знать следующее:
1. бывают индюки которые не рассчитывают 0-бар и следовательно его читать бесполезно (последняя цифра в вызове iCustom).
2. надо знать номера буферов, которые Вам нужны.
Отследить изменение цвета легко: в буферах не может быть одновременно на одном баре записано непустое значение - т.е. либо буф0 != EMPTY_VALUE, либо буф1. (если индюк написан правильно)
Ссылка на сообщение
Поделиться на другие сайты

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

Большое спасибо 0ll !!! Наконец-то написал начало. @-) Всё по видео. И с Вашей помощью разумеется. Там в видео ещё в старом билде всё описано. Чуть поправил,в меру своей безграмотности. Скомпилировал-0 ошибок! Вот что получилось:

extern double Lots = 0.1;
extern int TakeProfit = 10;
extern int StopLoss = 20;
extern int Slippage = 5;
extern string comment = "ROBOT 1";
extern int Magic = 1983;

string gs_unused_76 = "TheSecretTR~";
extern int ADX_period = 20;
extern int MOM_period = 20;
extern int MACD_fast_ema = 5;
extern int MACD_slow_ema = 15;
extern int MACD_signal_period = 9;
extern int MaxBarsOnGraph = 500;
double g_ibuf_108[];
double g_ibuf_112[];
double gda_116[];
double gda_120[];
double gda_124[];
double gda_128[];
double gda_132[];
double gda_136[];
double g_iadx_140;
double g_iadx_148;
double g_iadx_156;
double g_imomentum_164;
double g_imacd_172;
int g_bars_180;
int gi_184;
int gi_188;
int gi_196;
int gi_200;
int gi_204;
int gi_208;
int g_datetime_228;
int g_datetime_232;
int g_datetime_236;
int gi_unused_240;
int gi_244 = 0;
int gi_248;
int gi_256;
int gi_unused_260 = -1;
string gs_dummy_264;
string gs_272 = "TheSecret Trend Reversal";
string gs_dummy_280;

double мой_индюк_буф0, мой_индюк_буф1, SL, TP;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if (Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
}

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

return(0);
}
//+------------------------------------------------------------------+
//| Expert start function |
//+------------------------------------------------------------------+
int start()
{
мой_индюк_буф0 = iCustom(Symbol(), 0, "TheSecret Trend Reversal", ADX_period, MOM_period , MACD_fast_ema, MACD_slow_ema, MACD_signal_period, MaxBarsOnGraph, 0, 0);

мой_индюк_буф1 = iCustom(Symbol(), 0, "TheSecret Trend Reversal", ADX_period, MOM_period , MACD_fast_ema, MACD_slow_ema, MACD_signal_period, MaxBarsOnGraph, 1, 0);

if (Ask == мой_индюк_буф0 && CountBuy() == 0)
{
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)
bool modify1=OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);
}
}

if (Bid == мой_индюк_буф1 && 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)
bool modify2=OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);
}
}
return(0);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
bool select2=OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL)
count++;
}
}

return(count);
}

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

return(count);
}

Проверил в тесторе- СТОЛЬКО ОШИБОК :( !!!!
ВОТ ЧТО ОПЯТЬ НЕ ТАК??????? МОЖЕТ Я ДЭБИЛ :-s ?

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

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


Проверил в тесторе- СТОЛЬКО ОШИБОК :( !!!!
ВОТ ЧТО ОПЯТЬ НЕ ТАК???????

Так напишите какие ошибки (я не хочу грузить Вашу сову в терминал).
Вот это мне не нравиться: Ask == мой_индюк_буф0, я бы использовал .

МОЖЕТ Я ДЭБИЛ :-s ?

Вы чего? - хотите чтоб я Вас убеждал в обратном? Здесь не занимаются психотерапией - оффтоп.
Ссылка на сообщение
Поделиться на другие сайты

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

ВОТ ЧТО ПИШЕТ:
23:42:29 TestGenerator: spread set to 4
23:42:37 TestGenerator: unmatched data error (volume limit 84 at 2014.06.03 00:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 84 at 2014.06.03 00:00 exceeded)
=========ТАКИХ СТРОЧЕК ШТУК 30===============
23:42:37 TestGenerator: unmatched data error (volume limit 84 at 2014.06.03 00:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 84 at 2014.06.03 00:00 exceeded)
23:42:37 TestGenerator: unmatched data error (low value 139.18000 at 2014.06.03 00:00 is not reached from the least timeframe, low price 139.19000 mismatches)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:00 and price 139.26000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:01 and price 139.26000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:02 and price 139.26000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:03 and price 139.25000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:04 and price 139.25000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:05 and price 139.24000 mismatched)
23:42:37 TestGenerator: unmatched data error (volume limit 163 at 2014.06.03 01:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 163 at 2014.06.03 01:00 exceeded)
====ТАКИХ СТРОЧЕК ШТУК 50========================
23:42:37 TestGenerator: unmatched data error (volume limit 163 at 2014.06.03 01:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 163 at 2014.06.03 01:00 exceeded)
23:42:37 TestGenerator: unmatched data error (low value 139.17000 at 2014.06.03 01:00 is not reached from the least timeframe, low price 139.21000 mismatches)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 02:01 and price 139.30000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 02:02 and price 139.29000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 02:03 and price 139.29000 mismatched)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (low value 139.20000 at 2014.06.03 02:00 is not reached from the least timeframe, low price 139.27000 mismatches)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 03:01 and price 139.29000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 03:02 and price 139.31000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 03:03 and price 139.30000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 03:04 and price 139.33000 mismatched)
23:42:37 TestGenerator: 13907 generating errors, logged 100 first error records
23:42:37 МОЁ ПЕРВОЕ ТВОРЕНИЕ!!!!! inputs: Lots=0.1; TakeProfit=10; StopLoss=20; Slippage=5; Magic=1983; ADX_period=20; MOM_period=20; MACD_fast_ema=5; MACD_slow_ema=15; MACD_signal_period=9; MaxBarsOnGraph=500;
23:42:37 2014.06.03 00:00 Custom indicator TheSecret Trend Reversal EURJPY,H1: loaded successfully
23:42:42 EURJPY,H1: 113199 tick events (1409 bars, 114199 bar states) processed within 5460 ms (total time 12839 ms)

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

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


ВОТ ЧТО ПИШЕТ:
TestGenerator: unmatched data error
...
TestGenerator: 13907 generating errors, logged 100 first error records

У Вас с котировками хреново, а то, что не умеете пользоваться Гуглом - это ещё хуже.
Про сову написано, что она успешно загрузилась и всё. (выше писал что мне не нравиться в коде - может из-за этого сделок нет)
Ссылка на сообщение
Поделиться на другие сайты

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

Здраствуйте 0ll. Вот скрипт какой я хотел с вами обсудить. Задумка была такова в рынке находятся 7 ордеров по разным валютным парам,и открыты в разных направлениях.4 на пакупку, 3 на продажу.Так вот я хочу сделать функцию в виде скрипта для пробы, а потом что бы в будущем можно было ее интегрировать в советник. Мне нужно что бы скрипт определял валютную пару,то есть по какой валютной паре открыт ордер и брал с него лот.увеличивал его и открывал ордер в том же направлении и по той же валютной паре ? Буду признателен если научите как это сделать !

Мартин_USD_+70._v1.0.mq4

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

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


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

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

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

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


Добавлено: 27-06-2014 07:49:42

Дружище oll если брать полный алгоритм системы то он вкратце таков.
есть значение индикатора,открываем ордера, индикатор показывает более глубокие значения то увеличиваем лот и опять открываем ордера.в том же алгоритме работает еще раз. то есть открытие ордеров происходит по условию показаний индикатора не более трех колен.по всем парам. Изменено пользователем denis77515
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
denis77515 Что мне не нравится в Вашем скрипте (по порядку):
- массивы с названиями инструментов - ненужны, т.к. инициирующий ордер открывает другой скрипт.
- множество функций (по сути одинаковых) которые возвращают то символ последнего ордера, то лот, то тип - так нельзя. Это вообще ни к чему - зачем Вам данные последнего ордера? Вы наблюдаете за своим индюком, получили сигнал и запускаете скрипт-усреднитель, которые находит все открытые ордера с нужным магиком и усредняет позиции - ВСЁ. Тем более вдумайтесь: Вы усреднили последний ордер на следующий тик новый ордер станет последним - Вы и его усреднять будете?

Т.е. предлагаю выкинуть это всё и сделать один цикл по нужному магику. Находим ордер, берём лот*мартин, тип, символ и сразу открываем усредняющий. Т.к. количество усреднений - 3, то надо предусмотреть хитрый поиск ордера для усреднения... Например берём Символ первого попавшегося ордера и проверяем - сколько ордеров на символе с сортировкой на максимальный лот. Допустим находим два = значит уже было усреднение и текущий лот = Х*Магик.
После этого новый цикл (да, видимо без массива символов не обойтись) если есть ордер по символу усредняем и символ в фальсе, следующий и т.д.
Ссылка на сообщение
Поделиться на другие сайты

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

Дружище 0ll я примерно так картину мысленно для себя выстроил,а вот как это все реализовать на практике я не знаю. Потому обращаюсь к более опытным программистам. Я открывал тему напишем всем миром советник по ТС Кукловод так вот это все из этой оперы.Дорогой 0ll если вам интересна эта тема,давайте береберемся туда,что бы здесь не захламлять форум нашей перепиской. Я сейчас сижу дописываю советник по одной корзине ордеров. Выложу его там. естественно кроме функций усреднения.что бы более менее былы понятна картина чего я хочу добится от прогрвммы.

http://tlap.com/forum/ugolok-programmista/13/predlagayu-vsem-mirom-napisat-sovetnik-po-ts-kuklovod/6421

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

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

Спасибо Oll !!!!! Сделал вместо == Теперь открывает только Sell и не при смене цвета,а один за другим. Т.е. сработал SL или TP, он опять открывает. Вот. Ну хоть вообще начал работать. УРА!!!!!
У Вас с котировками хреново, а то, что не умеете пользоваться Гуглом - это ещё хуже.
Про сову написано, что она успешно загрузилась и всё. (выше писал что мне не нравиться в коде - может из-за этого сделок нет)

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

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


Сделал вместо == Теперь открывает только Sell и не при смене цвета,а один за другим.

Вы ранее писали : "А у меня гистограмма" - это означает, что индюк в подвале (отдельном окне под графиком) значение например = 45
Вдумайтесь: КАК можно сравнивать Ask > 45 ??? Поэтому у Вас всегда Селл потому что Bid Ранее я писал КАК нужно сравнивать. Ведь значением буфера будут либо пусто (Empty_Value), либо некая цифра (например 45), поэтому нужно писать:
if (мой_индюк_буф0 != Empty_Value && ... ) и
if (мой_индюк_буф1 != Empty_Value && ... ). Понятно?
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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