Библиотеки: Virtual - страница 57

 
fxsaber #:


Result.

What if I want to have an order filled at Ask + 200 pips? Or what if there's another order of 0.5 lots at Ask - 300 pips? How would I go about implementing that?  

I don't mean a pending order.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Virtual

hini, 2024.08.05 09:13

#define PIPS_TO_PRICE_TEST(x)  ((x) * SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE))
ORDER_BASE orders[];
ENUM_ORDER_TYPE firstType = OP_BUY;
int size = 7;
string strLots = "0.01,0.03,0.06,0.07";
string lots[];
int lotsSize = ::StringSplit(strLots, ',', lots);
ArrayResize(lots, size);
for (int i = 0; i < size; i++) {
  if (lots[i] == NULL) lots[i] = lots[lotsSize - 1];
}
double startOP = 1.23125;
datetime startOTime = D'2024-06-07 18:33:34';
ArrayResize(orders, size);
for(int i = 0; i < size; ++i) {
  ORDER order1;
  order1.MagicNumber = virtualHedgeAry[curSymbolIndex].EAMagicNumber;
  order1.Type = firstType;
  order1.Ticket = i + 1;
  order1.TakeProfit = 0;
  order1.StopLoss = 0;
  order1.Commission = 0;
  order1.Swap = 0;
  order1.Profit = -121;
  order1.CloseTimeMsc = 0;
  order1.ClosePrice = 0;
  order1.OpenReason = DEAL_REASON_EXPERT;
  order1.CloseReason = DEAL_REASON_CLIENT;
  order1.Lots = StringToDouble(lots[i]);
  order1.TickValue  = order1.Lots / _Point; // See SYMBOL_BASE::SetSymbol.
  order1.OpenPrice = startOP + PIPS_TO_PRICE_TEST(100);
  order1.OpenPriceRequest = order1.OpenPrice;
  order1.ClosePriceRequest = 0;
  order1.OpenTimeMsc = startOTime + 60 * 60;
  orders[i] = order1;
}

VIRTUAL::AddOrder(orders);

double totalProfit = 0;
for(int i = OrdersTotal() - 1; i >= 0; --i) {
  if (OrderSelect(i, SELECT_BY_POS))
    totalProfit += OrderProfit();       
}
 
fxsaber #:

OK,thanks!!! love you !

 
fxsaber #:

However,  OrderOpenTime()  still shows 1970 instead of the time I set, which is 2024-06-07 18:33:34.

double totalProfit = 0;
for(int i = OrdersTotal() - 1; i >= 0; --i) {
  if (OrderSelect(i, SELECT_BY_POS)) {
    totalProfit += OrderProfit();       
    datetime openTime = OrderOpenTime(); // openTime == 1970
  }
}
 
hini #:

However,  OrderOpenTime()  still shows 1970 instead of the time I set, which is 2024-06-07 18:33:34.

order1.OpenTimeMsc = (startOTime + 60 * 60) * 1000;
 
fxsaber #:

OK, everything is perfect, thank you!

 
Hi, fxsaber, I would like to understand how you develop a complex trading system EA. Do you have any experiences you could share with me? I would like to hear your advice. Does the trading system you developed have a GUI control panel?
 
hini #:
Hi, fxsaber, I would like to understand how you develop a complex trading system EA. Do you have any experiences you could share with me? I would like to hear your advice. Does the trading system you developed have a GUI control panel?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как в MQL5 сделать возобновление работы советника после паузы?

fxsaber, 2023.11.11 16:18

Из того, что практикую.

  1. Советник на чарте советника смотрит два самых правых объекта V_LINE. На интервале между ними работает OnlyClose-режим. Если только один объект, то второй считается на плюс бесконечности. Такой способ позволяет в конкретном терминале выключить конкретный советник по времени и затем автоматически включить его. Например, перед новостями и после.
  2. Выставление очень далекой отложки на счете. Это отключает торговлю на символе, на котором выставлена отложка. Помогает, когда потерян доступ к боевому терминалу. Получается удаленное управление советников. Снял отложку - возобновилась полноценная работа.
  3. В советнике input-коэффициент риска. Ноль - OnlyClose. Позволяет напрямую воздействовать на советник через входные.
  4. StopAll и StopXXX файлы в Common-папке. Отключает либо всю торговлю, либо символы с XXX-валютой. При этом отключение идет на всех боевых терминалах сразу.
  5. В глобальных переменных терминала коэффициент риска, который воздействует на все советники терминала. Ноль - все советники терминала в OnlyClose.


Не практикую.

  • Текстовый файл с расписанием работы советников. Советники используют только BestInterval-формат торговли при запуске.
  • Кнопка автоторговли чарта или терминала.
  • Отключение/включение советника по горячей клавише. Когда-то было удобно, потом - нет, т.к. сложно контролировать, что и где нажал. Велика вероятность ошибки.


Для контроля состояния всех советников терминала использую.

  1. Сбор по горячей клавише всей информации по запущенным советникам. В одном текстовом файле видишь сразу, что и как работает, а что - нет.
  2. По горячей клавише проход по всем советникам с проверкой, что работают штатно: нет деления на ноль, выхода за массив, какой-то советник при запуске терминала не запустился и т.д.
  3. Очень наглядные визуализации работы советников, о которых нет смысла здесь писать.


Что-то где-то писал в блоге и телеграме, наверное.

 
fxsaber #:
Советник на чарте советника смотрит два самых правых объекта V_LINE

I don't understand here. Where are the two V_Lines on the right side of the chart?

fxsaber #:
Советники используют только BestInterval-формат торговли при запуске.
Why not use BestInterval for trading? Doesn’t it optimize profitability?

fxsaber #:
Что-то где-то писал в блоге и телеграме, наверное.
Yes, I have been looking at your blog.
 
hini #:

I don't understand here.

Плохо работает автопереводчик. В тексте все равно ничего ценного нет.