0
Андрей, большое спасибо за оперативность.
Но в советнике не реализовано:
5.Закрытие позиций:
— или за Х минут (вынести в настройки) до окончания текущего бара.
Прошу доработать.
avatar

ssg

  • 5 января 2021, 19:37
0
Спасибо, будем ждать.
Слава, нет не подойдет.Там совсем другая логика.Поищи, ради интереса, в поисковике: стратегия Т101, или подобный запрос.В общем тема интересная.
avatar

ssg

  • 3 января 2021, 13:44
0
Добрый день.
1.Судя по Вашим словам (с учетом доработок) тестировались совершенно разные советники. А значит их сравнение не корректно.
2.Интересует практический пример применения и использования выложенных Вами файлов.
avatar

ssg

  • 23 ноября 2020, 05:54
0
Посмотрите этот вариант. Условия для удаления запишите сами.

//+----------------------------------------------------------------------------+
//|                                             test_DeleteOppositeOrders.mq4  |
//|                                                                            |
//|                                                    Ким Игорь В. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//|  16.06.2008  Скрипт для тестирования функции DeleteOppositeOrders().       |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link  "http://www.kimiv.ru"
#property show_confirm

//------- Глобальные переменные скрипта ---------------------------------------+
color  clDelete      = Yellow;         // Цвет значка удаление ордера
int    NumberOfTry   = 3;              // Количество торговых попыток
bool   UseSound      = True;           // Использовать звуковой сигнал
string NameFileSound = "expert.wav";   // Наименование звукового файла

//------- Подключение внешних модулей -----------------------------------------+
#include <stdlib.mqh>                  // Стандартная библиотека


void start() {
  DeleteOppositeOrders();
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Удаление ордеров, противоположных позиции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) {
  bool eb, es;

  switch (op) {
    case OP_BUY : eb=ExistPositions(sy, OP_BUY , mn); break;
    case OP_SELL: es=ExistPositions(sy, OP_SELL, mn); break;
    default:      eb=ExistPositions(sy, OP_BUY , mn);
                  es=ExistPositions(sy, OP_SELL, mn); break;
  }

  if (eb) {
    DeleteOrders(sy, OP_SELLLIMIT, mn);
    DeleteOrders(sy, OP_SELLSTOP , mn);
  }
  if (es) {
    DeleteOrders(sy, OP_BUYLIMIT, mn);
    DeleteOrders(sy, OP_BUYSTOP , mn);
  }
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Удаление ордеров                                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int  err, i, it, k=OrdersTotal(), ot;

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            for (it=1; it<=NumberOfTry; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(NameFileSound); break;
              } else {
                err=GetLastError();
                Print("Error(",err,") delete order ",GetNameOP(ot),": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.03.2008                                                     |
//|  Описание : Возвращает флаг существования позиций                          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование торговой операции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    op - идентификатор торговой операции                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("BuyLimit");
    case OP_SELLLIMIT: return("SellLimit");
    case OP_BUYSTOP  : return("BuyStop");
    case OP_SELLSTOP : return("SellStop");
    default          : return("Unknown Operation");
  }
}
//+----------------------------------------------------------------------------+

avatar

ssg

  • 21 ноября 2020, 19:06
0
Посмотрите этот вариант-https://www.mql5.com/ru/forum/121564/page2
avatar

ssg

  • 20 ноября 2020, 17:18
0
в коде считает время от начала свечи
extern int Minut = 15; // минут с начала часа
меняйте этот параметр
строка
if(OneCandleDeal() && CountTrades()<1 && TimeCurrent()>iTime(NULL,0,0)+Minut*60)
avatar

ssg

  • 11 ноября 2020, 17:50
0
Почитайте
www.mql5.com/ru/articles/1436
Очень полезная статья для начала изучения написания советников.
Там же несколько советников. Весь код разбит на блоки.
Есть блок откуда берутся сигналы для открытия позиций или выставления ордеров:
//+----------------------------------------------------------------------------+
//|  Возвращает торговый сигнал:                                               |
//|     2 - закрывай продажу                                                   |
//|     1 - покупай                                                            |
//|     0 - сиди, кури бамбук                                                  |
//|    -1 - продавай                                                           |
//|    -2 - закрывай покупку                                                   |
//|  Параметры:                                                                |
//|    sym - наименование инструмента ("" - текущий символ)                    |
//|    tf  - таймфрейм                ( 0 - текущий таймфрейм)                 |
//+----------------------------------------------------------------------------+
int GetTradeSignal(string sym="", int tf=0) {
  int bs=0;
  if (sym=="") sym=Symbol();

  // Блок анализа с присвоением значения переменной bs

  return(bs);
}

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

ssg

  • 11 ноября 2020, 16:15
0
А этот параметр
extern string Expiration = «15»;
менять не пробовали?
avatar

ssg

  • 11 ноября 2020, 16:05
0
М5 EUR/USD
extern string Expiration = «15»;???
avatar

ssg

  • 10 ноября 2020, 15:17
0
А оно надо качать неизвестно что? Сами скачайте и сюда выложите свой скрин (не с сайта).Отзывы читали?
avatar

ssg

  • 11 октября 2020, 12:31
0
#property description «Советник поддерживает баланс лотов встречных направлений по тому инструменту, на котором он расположен»
#property description «Пример имеем 3 лота Buy и 1 Sell, советник сразу добавит 2 лота Sell и будет поддерживать этот баланс все время»

По скрину
LB-LS-0.01
Следующий лот = 0.Нет лота — нет позиции или ордера

<code>case 131:
      st="Неправильный объём, ошибка в грануляции объёма.";
      if (po) st=StringConcatenate(st, "\n", "Необходимо прекратить все попытки",
                 " торговых операций и изменить логику программы.");
      break;</code>
avatar

ssg

  • 5 сентября 2020, 07:16
0
Ты всегда такой смелый или только смелый когда сидишь в выгребной яме своего сортира.
Если всегда тогда выйди в своем городе на площадь и скажи это вслух громко.
Но думаю ты очередной либераст, тебе поставили пендосы на землю тазик с отходами ты их хлебаешь радостный, а что с твоей задницей делают тебе не важно.Ведь тазик с отходами всегда полон.
avatar

ssg

  • 28 августа 2020, 18:26
0
Это в настройки
<code>extern int  max_Spread=20;</code>

Эти строки добавьте в функцию старт в самом начале.
<code>
void start() {
int    spr=MarketInfo(Symbol(), MODE_SPREAD);
if(spr > max_Spread) return(0);//выходим
</code>

avatar

ssg

  • 23 августа 2020, 20:47
0
Зато есть функция «Старт».
avatar

ssg

  • 23 августа 2020, 05:45
0
Можно посмотреть в эту сторону. Скрипт легко можно переделать в индикатор или вставить ко в нужный советник или индикатор.
//+------------------------------------------------------------------+
//|                                                 AverageRange.mq4 |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|   14.09.2005  Скрипт для расчёта:                                |
//| средней волатильности инструмента High-Low                       |
//| среднего размера тела свечи       ABS(Open-Close)                |
//| среднего размера тени свечи                                      |
//+------------------------------------------------------------------+

#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
//#property indicator_chart_window                                      //А ТАК БУДЕТ ИНДИКАТОР

#property show_inputs

extern datetime BeginDateCalc = D'2020.01.01';
extern datetime EndDateCalc   = D'2030.12.30';

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start() 
{
  int    i, b=0, bb=0, eb, h=0, l=0, s=0, t=0;
  string comm="";

  for (i=Bars; i>0; i--) 
  {
    if (Time[i]>=BeginDateCalc && Time[i]<=EndDateCalc) 
    {
      if (bb==0) bb=i;
      s+=(High[i]-Low[i])/Point;
      t+=MathAbs(Open[i]-Close[i])/Point;
      if (Open[i]>Close[i]) 
      {
        h+=(High[i]-Open[i])/Point;
        l+=(Close[i]-Low[i])/Point;
      } else {
        h+=(High[i]-Close[i])/Point;
        l+=(Open[i]-Low[i])/Point;
      }
      b++;
    }
  }

  comm = "Начало: " + TimeToStr(Time[bb], TIME_DATE|TIME_MINUTES) + "\n";
  comm = comm + "Конец: " + TimeToStr(Time[bb-b+1], TIME_DATE|TIME_MINUTES) + "\n";
  comm = comm + "Средняя волатильность: " + s/b + " п.\n";
  comm = comm + "Средний размер тела: " + t/b + " п.\n";
  comm = comm + "Средний размер верхней тени: " + h/b + " п.\n";
  comm = comm + "Средний размер нижней тени: " + l/b + " п.";

  Comment(comm);
}
//+------------------------------------------------------------------+

avatar

ssg

  • 15 августа 2020, 11:09
0
Он открыт кем то при помощи декомпилятора
Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com

Видите наборы каких то символов в коде.
avatar

ssg

  • 12 августа 2020, 11:24
0
Если нет открытого кода значит программист не захотел его показать.
Декомпил — считай взлом и воровство кода другого программиста.
Нормальная этика программиста не позволяет этим пользоваться.
Его код так же может быть взломан.
Не путайте с хакером.
avatar

ssg

  • 12 августа 2020, 09:33
0
Понял, Андрей.
Конечно можно перенести расчет в советник или сделать его функцией.
Но как индикатор он в использовании предпочтительнее.
Шаман, привет.
Ширину зоны можно регулировать — input int pip=10;
Другое дело нужен механизм (способ, принцип)автоматического определение ширины этой зоны.
avatar

ssg

  • 9 августа 2020, 10:31
0
Андрей, добрый день.
Напишите пожалуйста код вызова этого индикатора в советнике.
double up = iCustom(
double dn = iCustom(
Или добавьте буферы в индикатор для последующего вызова.
avatar

ssg

  • 9 августа 2020, 05:24
0
Андрей, спасибо!
А то я уже полез, как обычно, на сайт www.mql5.com там смотреть коды и статьи про МТ5. Прочитал Вашу статью «КАК БЫСТРО НАПИСАТЬ СОВЕТНИК ДЛЯ AUTOMATED TRADING CHAMPIONSHIP 2010».
Все хотелось обойтись без библиотек.
Усреднение попробую сам добавить.
Спасибо.
avatar

ssg

  • 8 августа 2020, 13:28