Лента последних комментариев


0
На реальном графике (не на тестере) сегодня вот такая картинка.
1. Уровень, нарисованный индикатором.
2. Уровень от советника.
3. Вверху уровни совпадают.
avatar

apologetest

  • 19 марта 2020, 14:33
0
Посмотрите, пожалуйста, видео.
youtu.be/lsc-zgQJdU8
avatar

apologetest

  • 19 марта 2020, 14:23
0
Ну что, ни кого не заинтересовал быть поручителем? В ручную редкий день в минус получается.
avatar

sdanef

  • 19 марта 2020, 12:30
0
Добрый день! Добавьте в советник функцию при включении которой, советник не открывает новые ордера после закрытия серии всех сделок по указанному профиту.
avatar

johnkomi83

  • 19 марта 2020, 11:30
0
Так ведь предыдущий вариант хорошо работал.
Я попросил только ограничение по ширине коридора добавить


это было добавлено сразу

и еще:
— добавить возможность оптимизации советника по времени


добавил вам сначала оптимизацию по часам, вам потребовалось еще по минутам. тоже добавил и опять не ладно. обращайтесь к платному
avatar

AM2

  • 18 марта 2020, 21:43
0
проверил все работает. советник нарисовал канал, выставил ордера:

avatar

AM2

  • 18 марта 2020, 21:37
0
что именно там нужно? у меня несколько версий
avatar

AM2

  • 18 марта 2020, 20:15
0
Так ведь предыдущий вариант хорошо работал.
Я попросил только ограничение по ширине коридора добавить.
Ладно, в следующем месяце буду просить исправить… ((
avatar

apologetest

  • 18 марта 2020, 20:01
0
заказов много, могу уделить каждому лишь минимум времени.
avatar

AM2

  • 18 марта 2020, 18:13
0
в чем сложность, могли бы объяснить?

узнайте сколько стоит такая работа на платном и вы сразу все поймете
avatar

AM2

  • 18 марта 2020, 18:08
0
Вот что мне удалось сделать
//+------------------------------------------------------------------+
//|                                                  StopOutInfo.mq4 |
//|                              Copyright 2020, Dmitriy Kudryashov. |
//|                       https://www.mql5.com/ru/users/dlim0n4ik.dk |
//+------------------------------------------------------------------+
#property strict  //Указание компилятору на применение особого строгого режима проверки ошибок
//---
#define  NAME_PROGRAM   "Indicator"             // Имя программы
#define  YEAR_CREATE    2020                    // Год создание первой рабочей версии программы
#define  NAME_COMPANY   "Dmitriy Kudryashov."   // Имя компании (автора)
//---
bool     debug_mode   = false;                  // Режим отладки. В журнале при тестировании выводятся сообщения из разных функций.
bool     demo_version = false;                  // Данная версия программы является демонстративной?
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|   Функция деинициализации программы                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
//--------------------------------------------------------------------
ObjectsDeleteAll(0,"info_");
//--------------------------------------------------------------------
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
string symbol = Symbol();
//--- Определим соответствующее свойства для символа -----------------
int      digits = (int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);// Количество знаков после запятой
double   point  = SymbolInfoDouble(symbol,SYMBOL_POINT);       // Значение одного пункта
double   bid    = SymbolInfoDouble(symbol,SYMBOL_BID);         // Лучшее предложение на продажу
double   ask    = SymbolInfoDouble(symbol,SYMBOL_ASK);         // Лучшее предложение на покупку
//--------------------------------------------------------------------
string comment = "";
int stop_out = AccountStopoutLevel();
double equity = AccountEquity();
double averaging_price = AveragingPrice(symbol);
//--------------------------------------------------------------------
comment += "Уровень слива: " + 000 + "\n";
comment += "Осталось до StopOut: " + DoubleToStr(equity / CountOpenOrders(symbol),0) + "\n";
comment += "Закрытие/StopOut: " + StringConcatenate(stop_out) + "%" + "\n";
comment += "Уровень Общ.Безуб.: " + DoubleToStr(averaging_price,digits) + "\n";
comment += "... осталось: " + DoubleToStr((averaging_price - bid) / point,0) + "\n";
//comment +=  (AccountEquity()/AccountFreeMargin()) * 100 + "\n";
//--------------------------------------------------------------------
Comment(comment);
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  Описание : Расчитывает уровень бузубытка открытых позиций с     |
//|            задаными параметрами.                                 |
//|  Параметры:                                                      |
//|            symbol - Наименование тогового инструмента            |
//|                     (NULL текущий торговый инструмент);          |
//|            cmd    - Торговая операция (При значении -1 будет     |
//|                     обрабатываться любая позиция);               |
//|            magic  - Номер индентификатора торгового советника    |
//|                     (NULL любой номер).                          |
//|  Версия от: 01.10.2019                                           |
//+------------------------------------------------------------------+
double AveragingPrice(string          symbol = NULL)
{
//--- Проверим торговый инстремент (символ)... -----------------------
if (symbol == NULL) symbol = Symbol(); // Если символ равен NULL, то присвоим символу значения Symbol()
//--------------------------------------------------------------------
//--- Определяем соответствующее свойства указанного символа ---------
int    digits     = (int) SymbolInfoInteger(symbol,SYMBOL_DIGITS); /* Количество знаков после запятой */
double point      = SymbolInfoDouble(symbol,SYMBOL_POINT);         /* Значение одного пункта */
double tickvalue  = MarketInfo(symbol,MODE_TICKVALUE);
//--------------------------------------------------------------------
//--- Инициализация переменых... -------------------------------------
double result           = 0.0;            /* ... конечного результата */
double count_price      = 0.0;            /* ... сумма цены */
double count_lots       = 0.0;            /* ... сумма лота */
//--------------------------------------------------------------------
//--- Расчет средней цены безубытка ----------------------------------
for (int index = 0; index < OrdersTotal(); index++)
   {
   if (OrderSelect(index, SELECT_BY_POS, MODE_TRADES) == FALSE) break;
   if (OrderSymbol() == symbol)
      {
      if (OrderType() == OP_BUY)
         {
         count_price += OrderOpenPrice() * OrderLots();
         count_lots += OrderLots();
         }
      if (OrderType() == OP_SELL)
         {
         count_price -= OrderOpenPrice() * OrderLots();
         count_lots -= OrderLots();
         }
      }
   }
//--------------------------------------------------------------------
if (count_lots < 0.01) count_lots = 0.01;
result = NormalizeDouble((count_price / count_lots), digits);
//--------------------------------------------------------------------
return(result);
//--------------------------------------------------------------------
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  Описание : Функция ведет подсчет открытых или отложеных позиций |
//|            с задаными параметрами.                               |
//|  Параметры:                                                      |
//|            symbol - Наименование тогового инструмента            |
//|                     (NULL текущий торговый инструмент);          |
//|            cmd    - Торговая операция (При значении -1 будет     |
//|                     обрабатываться любая позиция);               |
//|            magic  - Номер индентификатора торгового советника    |
//|                     (NULL любой номер).                          |
//|  Версия от: 01.10.2019                                           |
//+------------------------------------------------------------------+
int CountOpenOrders(string          symbol = NULL) //Торговый инструмент

{
//--- Проверим торговый инстремент (символ)... -----------------------
if (symbol == NULL) symbol = Symbol(); // Если символ равен NULL, то присвоим символу значения Symbol()
//--------------------------------------------------------------------
//--- Инициализация переменных ---------------------------------------
int count = 0;             // Расчет
int result_new = 0;        // Новый результат изменяется каждый раз после подсчета значения count
int static  result_old = 0;// Старый результат (является статичным значением)
int static  result = 0;    // Конечный результат (является статичным значением)
//--------------------------------------------------------------------
//--- Цикл подсчета открытых ордеров... ------------------------------
for (int index = 0; index < OrdersTotal(); index++)                  // перебираем значение index пока оно меньше количества открытых и отложеных позиций
   {
   if (OrderSelect(index, SELECT_BY_POS, MODE_TRADES)==false) break; // выберим открытую позицию...
   if (OrderSymbol() == symbol)                                      // проверим символ ордера...
      {
      if (OrderType() == OP_BUY) count++;               // проверим тип (торговую операцию) позиции и увеличим значение count на 1
      if (OrderType() == OP_SELL) count--;
      }
   }
//--------------------------------------------------------------------
result = count;
//--------------------------------------------------------------------
return (result);                                                      // вернем полученое значение result
}
//+------------------------------------------------------------------+
avatar

Kudryashov

  • 18 марта 2020, 16:28
0
Андрей, проверьте, пожалуйста.
1. Это коридор показывает аналогичный индикатор. Нижняя граница коридора по индикатору совпадает с нижней границей, которую показывает советника.
2. Верхняя граница коридора, которую показывает советник.
3. Точка, где был выставлен верхний ордер и закрыт после открытия нижнего. Совпадает с границей по индикатору.

Где-то ошибка в графическом отображении.
avatar

apologetest

  • 18 марта 2020, 15:39
0
Андрей, спасибо *victory*  как часики сова. Вроде бы все нормуль (и правда есть сходство с обычным RSI).
avatar

poker

  • 18 марта 2020, 14:57
0
Конечно делай, готовое решение не найдено.
avatar

Wizas

  • 18 марта 2020, 13:05
0
но это элементарный парсинг, при любом изменении алерт. в чем сложность, могли бы объяснить?
avatar

igrun

  • 18 марта 2020, 11:21
0
Добрый день Андрей. В сообщении выше я как раз написал о том что вход 1 и 2 не выполняют условия по тз но советник их совершил

Или вы хотите сказать о том что советник перерисовывает? Ни в ручную ни при тесте он за подобным не был замечен. я не совсем понимаю но возможно что советник не корректно ориентируется по значению индикатора trend risk. Руками я просто смотрю чтобы визуально он был ниже канала/выше канала/внутри канала (менял цвет). А так как ни один из индикаторов своё значение после закрытого ордера по сигналу не менял то и вход 1 и 2 в ручную я бы точно не совершил.

возможно ли вообще сделать советник так как торговал бы человек руками или это уже ни как не исправить? в любом случае ОГРОМНОЕ СПАСИБО!
avatar

snithe

  • 18 марта 2020, 03:36