Kashtan
Игорь

 
Уровень 18

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2089



РЕКОМЕНДУЮ



Скрипт для МТ5

Прошу написать скрипт для МТ5

Настройки:
1. Объём первого ордера
2. Цена первого ордера
3. Расстояние в пунктах от первого ордера до ТП
4. Количество ордеров
5. Шаг между ордерами
6. Коэфф. умножения

ТЗ
При перетаскивании на график в соответствии с настройками ставится сетка лимитных ордеров на покупку.
Предполагается, что уровень ТП остаётся прежним независимо от количества затронутых ордеров. Учитывая это в углу графика выводится следующая информация:
а) Размер просадки в валюте депо на момент активации крайнего ордера (в примере на скрине 113.500)
б) прибыль при закрытии по ТП набранной позиции из всех отложек.
в) Суммарный объём позиции.


Из примера на скрине настройки будут такие:
1. 0.01
2. 113.700
3. 300
4. 3
5. 100
6. 2
  • 0
  • Просмотров: 2640
  • 29 октября 2021, 19:57
  • Kashtan
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Индикатор hetmap_sw
29 октября 2021
31 октября 2021

Комментарии (16)

+
0
на 2-е
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 29 октября 2021, 20:42
+
0
вот скрипт:


//+------------------------------------------------------------------+
//|                                                        Limit.mq5 |
//|                                              Copyright 2021, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"

#include <Trade\Trade.mqh>
CTrade trade;

input double Lots       = 0.1;      // лот
input double KLot       = 2;        // увеличение лота
input double Price      = 1.16;     // цена первого ордера
input int StopLoss      = 0;        // лось
input int TakeProfit    = 300;      // язь
input int Count         = 3;        // число ордеров
input int Step          = 100;      // шаг
input int Type          = 2;        // 1-BuyLimit 2-SellLimit
input int Slip          = 5;        // реквот

double sum=0;
double lot=Lots;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double pr=0,sl=0,tp=0;

   if(OrdersTotal()<1 && PositionsTotal()<1 && !IsStopped())
     {
      if(Type==1)
         for(int i=0; i<Count; i++)
           {
            sum+=lot;

            pr=NormalizeDouble(Price-Step*_Point*i,_Digits);

            if(StopLoss>0)
               sl=pr-StopLoss*_Point;

            if(TakeProfit>0)
               tp=Price+TakeProfit*_Point;

            trade.BuyLimit(lot,pr,NULL,sl,tp,0,0,"");

            lot*=KLot;
           }

      if(Type==2)
         for(int i=0; i<Count; i++)
           {
            sum+=lot;

            pr=NormalizeDouble(Price+Step*_Point*i,_Digits);

            if(StopLoss>0)
               sl=pr+StopLoss*_Point;

            if(TakeProfit>0)
               tp=Price-TakeProfit*_Point;

            trade.SellLimit(lot,pr,NULL,sl,tp,0,0,"");

            lot*=KLot;
           }
     }

   Comment("\n Profit: ",AccountInfoDouble(ACCOUNT_BALANCE)-AccountInfoDouble(ACCOUNT_EQUITY),
           "\n Summ Lot: ",sum);
  }
//+------------------------------------------------------------------+



вот советник:


//+------------------------------------------------------------------+
//|                                                        Limit.mq5 |
//|                                              Copyright 2021, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"

#include <Trade\Trade.mqh>
CTrade trade;

input double Lots       = 0.1;      // лот
input double KLot       = 2;        // увеличение лота
input double Price      = 1.16;     // цена первого ордера
input int StopLoss      = 0;        // лось
input int TakeProfit    = 300;      // язь
input int Count         = 3;        // число ордеров
input int Step          = 100;      // шаг
input int Type          = 2;        // 1-BuyLimit 2-SellLimit
input int Slip          = 5;        // реквот

double sum=0;
double lot=Lots;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double pr=0,sl=0,tp=0;

   if(OrdersTotal()<1 && PositionsTotal()<1)
     {
      if(Type==1)
         for(int i=0; i<Count; i++)
           {
            sum+=lot;

            pr=NormalizeDouble(Price-Step*_Point*i,_Digits);

            if(StopLoss>0)
               sl=pr-StopLoss*_Point;

            if(TakeProfit>0)
               tp=Price+TakeProfit*_Point;

            trade.BuyLimit(lot,pr,NULL,sl,tp,0,0,"");

            lot*=KLot;
           }

      if(Type==2)
         for(int i=0; i<Count; i++)
           {
            sum+=lot;

            pr=NormalizeDouble(Price+Step*_Point*i,_Digits);

            if(StopLoss>0)
               sl=pr+StopLoss*_Point;

            if(TakeProfit>0)
               tp=Price-TakeProfit*_Point;

            trade.SellLimit(lot,pr,NULL,sl,tp,0,0,"");

            lot*=KLot;
           }
     }

   Comment("\n Profit: ",AccountInfoDouble(ACCOUNT_BALANCE)-AccountInfoDouble(ACCOUNT_EQUITY),
           "\n Summ Lot: ",sum);
  }
//+------------------------------------------------------------------+





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

  34  AM2 Сообщений: 15891 - Андрей

  • 31 октября 2021, 09:40
+
0
О!!! не знаю как и благодарить:)  Про советник угадали, думал его уже следующим заказом просить.
avatar

  18  Kashtan Автор Сообщений: 737 - Игорь

  • 31 октября 2021, 14:21
+
0
Андрей привет) Планировалась отладка скрипта, убедился что не работает. Советник в текущем варианте пока не важен, буду просить следующим заказом некоторые доработки. Сейчас нужен только рабочий скрипт согласно ТЗ
Редактирован: 1 ноября 2021, 19:45
avatar

  18  Kashtan Автор Сообщений: 737 - Игорь

  • 1 ноября 2021, 19:42
+
0
У меня даже ордеров не ставит. При компиляции пишет это:
avatar

  18  Kashtan Автор Сообщений: 737 - Игорь

  • 1 ноября 2021, 19:52
+
0
проверил скрипт. работает:



avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 1 ноября 2021, 20:31
комментарий был удален 2021-11-02 19:48:19 Kashtan

комментарий был удален 2021-11-02 19:48:27 Kashtan

+
0
По поводу установки ордеров дико извиняюсь) Была отключена автоторговля, забыл что скрипты к ней относятся. А с выводимой инфой вопрос остаётся не решённым. Не хватает размера просадки в случае активации всех ордеров сетки, и возможной прибыли — когда эта сетка закроется по ТП. По возможности прошу доделать. Из вышеперечисленного верно считается только суммарный лот. Общий тейк от части верно, но эта цифра стоит в конце после всех нулей. Коммента по просадке вообще нет.
Редактирован: 2 ноября 2021, 20:14
avatar

  18  Kashtan Автор Сообщений: 737 - Игорь

  • 2 ноября 2021, 18:46
+
0
Только что всплыл один серьёзный баг. Если уже есть ручной рыночный ордер, скрипт отлоги не ставит.
avatar

  18  Kashtan Автор Сообщений: 737 - Игорь

  • 2 ноября 2021, 19:50
+
0
Если просьбы в крайних двух комментах относительно сложно исправить, то предлагаю (прошу) дать добро на новый заказ по поводу изменения выше написанного советника<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; То есть постараюсь насколько возможно ясно описать, что хотелось бы на основе имеющегося алгоритма. Доработки судя по всему будут не значительными.
Редактирован: 2 ноября 2021, 20:05
avatar

  18  Kashtan Автор Сообщений: 737 - Игорь

  • 2 ноября 2021, 20:02
+
0
скрипт это одноразовая штука как правило. выставил ордера и баста. чтобы следить за дальнейшим развитием событий нужен советник
avatar

  34  AM2 Сообщений: 15891 - Андрей

  • 2 ноября 2021, 21:09
+
0
Где для верной компиляции скрипта надо это вставить? #property show_inputs. В случае добавление после остальных параметров выдаёт ошибку.
Редактирован: 5 ноября 2021, 13:20
avatar

  18  Kashtan Автор Сообщений: 737 - Игорь

  • 4 ноября 2021, 16:39
+
0
Надо чтоб выводился диалог
avatar

  18  Kashtan Автор Сообщений: 737 - Игорь

  • 4 ноября 2021, 16:44
+
0
Андрей после изменения настроек и компиляции скрипт не ставит дополнительные ордера, если осталась прошлая сетка. Приходится удалять все старые отложки перед этим. Как можно решить такую проблему?
Редактирован: 5 ноября 2021, 13:19
avatar

  18  Kashtan Автор Сообщений: 737 - Игорь

  • 5 ноября 2021, 13:18
+
0
«скрипт это одноразовая штука как правило. выставил ордера и баста. чтобы следить за дальнейшим развитием событий нужен советник»
АМ
avatar

  16  ssg Сообщений: 817

  • 6 ноября 2021, 08:40

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари