0
Можете показать код главной функции
<code>
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
</code>

другого советника.
вставляется через опцию
<code>code рядом со смайликом.</code>
avatar

ssg

  • 19 февраля 2022, 17:31
0
Судя по визуализации индикатора у него и на три бара опоздание.
Сравните гте ставиться точка и где идет перелом цены.
avatar

ssg

  • 19 февраля 2022, 17:05
0
Вы можете сами писать коды советников, или хотя бы читать коды советников написанные другим человеком?
Если можете, то напишите сами. Если не можете, тогда я Вам говорю, с кодом все в порядке. Правда Ваше право мне не верить.Поставьте на демосчет советника и разберитесь как считает индикатор и какова математика расчета у него.
В противном случае дальнейшее обсуждение советника бессмысленно.
avatar

ssg

  • 19 февраля 2022, 17:03
0
Поставьте советник торговать на демосчет на разумное время.Отслеживайте сигналы.Одновременно смотрите записи в журнале.
А код советника — он открытый, в отличии от кода индикатора. В код индикатора Андрей не вмешивался. Запустил индикатор на графике.Навел курсор на один значок-получил номер о буфера индикатора для покупок, навел на второй значок-получил номер буфера для продаж.Прописал в коде.
С таким же успехом можно обвинить и Ваш комьютер-не открывает позиции.
На демосчете, хотя бы, поторгуйте с недельку.
avatar

ssg

  • 19 февраля 2022, 15:21
0
1.Тестируйте по тикам.
2.Скриншот только подтверждает, что индикатор дает сигналы задним числом.
Одномоментно все три сигнала не происходят.Машине «до лампочки» наши
рассуждения о том есть ли сигнал визуально или нет, для неё закон это код.
Вы картинку предоставили, а что в журнале пишется анализировали?
Не удивлюсь если в журнале пишут (даже если все три сигнала присутствует) —
цена устарела.
По коду проверка идет при поступлении первого тика на новой свече!!!
Второй, третий ,… уже не в счет.
Вы не смогли разобраться в коде советника.
Вы даже не знаете (как и мы ) какой алгоритм заложен в индикаторе, а вините
Андрея в том, что код неверный и советник не по стратегии работает.
avatar

ssg

  • 19 февраля 2022, 13:57
0
Нет там никакого ограничения по количеству.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double blu = iCustom(NULL,0,IndName,0,Shift);
   double red = iCustom(NULL,0,IndName,1,Shift);

   bool buy = blu>0;
   bool sell = red>0;

   if(t!=Time[0] && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()))
     {
      if(buy)
         PutOrder(0,Ask);
      if(sell)
         PutOrder(1,Bid);
      t=Time[0];
     }


   if(AllProfit(0)>Profit && Profit>0 && CountTrades(0)<2)
     {
      CloseAll(0);
     }

   if(AllProfit(1)>Profit && Profit>0 && CountTrades(1)<2)
     {
      CloseAll(1);
     }

   if(AllProfitM(0)>MProfit && MProfit>0 && CountTrades(0)>1)
     {
      CloseAllM(0);
     }

   if(AllProfitM(1)>MProfit && MProfit>0 && CountTrades(1)>1)
     {
      CloseAllM(1);
     }


   Comment("\n Buy Profit: ",AllProfit(0),
           "\n Sell Profit: ",AllProfit(1),
           "\n Side Buy Profit: ",AllProfitM(0),
           "\n Side Sell Profit: ",AllProfitM(1));
  }
//+------------------------------------------------------------------+


Позиция откроется если совпали одновременно три условия:
-если наступило время торговли и
-если открылся новая свеча и
-если есть сигнал индикатора — открывается позиция.
avatar

ssg

  • 19 февраля 2022, 12:07
0
Попробуйте поставить 0 в настройках:

extern int Shift         = 0;        // бар индикатора

Сигнал на открытие позиций:

 double blu = iCustom(NULL,0,IndName,0,Shift);
 double red = iCustom(NULL,0,IndName,1,Shift);

avatar

ssg

  • 19 февраля 2022, 11:24
0
Ну это я думаю индикаторы переживут.
А Вы знаете, что график цены это тоже индикатор?
А что считает и показывает индикатор АТР прочитать не помешает, хотя бы для понимания.
avatar

ssg

  • 19 февраля 2022, 04:23
0
Стандартный индикатор, находится в папке индикаторы.
avatar

ssg

  • 18 февраля 2022, 16:56
0
Проблема в том, что брокер дает цену как дискретную величину.Любая жестко указанная вами цена открытия позиции (например евро=1.13802) может не попасть в цену указанную брокером (например евро=1.13800 или евро=1.13895) и тогда позиция не откроется.Нужен доверительный интервал (т.е.+-, от и до), но брать наверное нужно не спред(он тоже плавает), а 1-3 стоплевела или конкретное кол-во пунктов.
Ну или уходить на отложенные ордера.
avatar

ssg

  • 17 февраля 2022, 22:48
0
Условия закрытия озвученные Вами Андрей реализовал «в лоб» через:

extern int StopLoss      = 600;      // лось
extern int TakeProfit    = 200;      // язь
extern int Step          = 200;      // шаг


как раз по Вашему — тейк = 1 шаг, а стоп = 3 шага. Но это частный случай.
Если ближе и Вам понятнее Функцию можно переписать так:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)
         sl=NormalizeDouble(price+Step*3*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price-Step*1*_Point,_Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)
         sl=NormalizeDouble(price-Step*3*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price+Step*1*_Point,_Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,Comm,Magic,0,clr);
   return;
  }

Причем числа 1 и 3 можно вынести как переменные в настройки.
А вот изменения размера лота нет на самом деле.
avatar

ssg

  • 17 февраля 2022, 22:33
0
Это была ирония.:) 
Если по физике: расстояние/время = скорость,
то в той надуманной белиберде: расстояние*расстояние — время*время =… вообще нет ни логики ни здравого смысла.
Автор говорит: не важно что происходит в мире, закон рынка один-от квадрата расстояния отнять квадрат времени это и будет цена любого актива.*wall* 
Хотя в свете достижения химии на западе можно такие вещи синтезировать, что до конца жизни уже не отпустит.
Но согласен, что каждый волен высказывать свое мнение.Правда лучше сначала хоть немного подумать.*hi* 
avatar

ssg

  • 15 февраля 2022, 21:26
0
1.Попробуйте себе самому, ну и если поймете сами и нам тоже, объяснить кабалистику расчетов (хоть элементарную логику и анализ).
2.Интересно как автор методики «рисовал и рассчитывал» бы векторы и уровни немного правее и чуть левее выбранного им участка истории.
3.А как индикатор, да и Вы сами, будете определять точки отсчета, или тоже только на прошлогодней истории?
avatar

ssg

  • 15 февраля 2022, 18:10
0
Функция Comment()
void Comment(...)
Функция выводит комментарий, определенный пользователем, в левый верхний угол окна финансового инструмента. Параметры могут иметь любой тип. Количество параметров не может превышать 64. Массивы нельзя передавать в функцию Comment(). Массивы должны печататься поэлементно. Данные типа double выводятся с 4 десятичными цифрами после точки. Для вывода чисел с большей точностью необходимо использовать функцию DoubleToStr(). Типы bool, datetime и color будут напечатаны как числа. Чтобы вывести данные типа datetime в виде строки необходимо использовать функцию TimeToStr().

Параметры:
… — любые значения, разделенные запятыми.

Примером использования этой функции может служить простой эксперт comment.mq4, отражающий информацию о количестве ордеров.

//--------------------------------------------------------------------
// comment.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int start()                            // Спец. функция start
  {
   int Orders=OrdersTotal();           // Количество ордеров
   if (Orders==0)                      // Если кол.орд равно 0
      Comment("Ордеров нет");          // Комментарий в угол окна
   else                                // Если есть ордера
      Comment("В торговле имеется ",Orders," ордеров." );// Коммент.
   return;                             // Выход 
  }
//--------------------------------------------------------------------


В начале программы с помощью функции OrdersTotal() вычисляется общее количество ордеров. В случае, если переменная Orders (количество ордеров) равна 0, то исполняется функция Comment() с параметром «Ордеров нет». Если же в торговле присутствует хотя бы один ордер, то выполняется функция Comment() со списком параметров, перечисленных через запятую. В данном случае используется 3 параметра, первый из которых — строковое значение «В торговле имеется », второй — целое число Orders и третий — строковое значение " ордеров.". В результате исполнения эксперта при каждом запуске на исполнение функции start() в левом верхнем углу окна финансового инструмента будет отображаться одна из надписей.
avatar

ssg

  • 13 февраля 2022, 12:07
0
Да.

//+------------------------------------------------------------------+
//| Лот на стоп от депо                                              |
//+------------------------------------------------------------------+
double Lot(){
   double lt=lot;
   if(lot==0)
     {
      lt=NormalizeDouble((AccountEquity()*risk)/(100*StopLoss),2); 
     }
   return(lt);
  }
avatar

ssg

  • 10 февраля 2022, 22:13
0
У Андрея советник выставляет И байлимит И селллимит ордера одновременно.
avatar

ssg

  • 10 февраля 2022, 22:11
0
Скрипт должен выставлять BUYLIM или SELLLIM на уровень указанный мышкой с величиной лота от заданного SL.

Самая простая реализация:

//+------------------------------------------------------------------+
//|                        Скрипт risk для МТ4   Mouse Lot SL TP.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                          http://www.mункцql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mункцql5.com"
#property version   "1.00"
#property strict

#property show_inputs

extern double lot        = 1;
extern int    risk       = 10;
extern int    StopLoss   = 300;
extern int    Slippage   = 30;
extern double n          = 2;

extern int Magic         = 123;
int TakeProfit;
//+------------------------------------------------------------------+
//| Лот на стоп от депо                                              |
//+------------------------------------------------------------------+
double Lot(){
   double lt=lot;
   if(lot==0)
     {
      lt=NormalizeDouble((AccountEquity()*risk)/(100*StopLoss),2); 
     }
   return(lt);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
   double priceBuy = NormalizeDouble(WindowPriceOnDropped()-StopLevel*Point,Digits);
   double priceSell = NormalizeDouble(WindowPriceOnDropped()+StopLevel*Point,Digits);
   TakeProfit = NormalizeDouble(n*StopLoss,0);
   
   if(priceBuy<=Ask-StopLevel) 
      { 
       SetOrder(NULL, OP_BUYLIMIT, Lot(), priceBuy, priceBuy-StopLoss*Point, priceBuy+(StopLoss*n)*Point, Magic);
      }
   if(priceSell>=Bid+StopLevel) 
      {     
       SetOrder(NULL, OP_SELLLIMIT, Lot(), priceSell, priceSell+StopLoss*Point, priceSell-(StopLoss*n)*Point, Magic);
      }
   Comment("\n Lot: ",Lot(),
           "\n StopLoss: ",StopLoss,
           "\n TakeProfit: ",TakeProfit);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, datetime ex=0) {
  int   err, ticket;

  if (sy=="" || sy=="0") sy=Symbol();
  ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, ex, clrNONE);
  if (ticket<0) {
    err=GetLastError();
  }
}
//+----------------------------------------------------------------------------+
avatar

ssg

  • 10 февраля 2022, 22:09
0
Судя по пожеланию предполагается одновременная установка и байлимит и селлимит и байстоп и селстоп.Или нет?
avatar

ssg

  • 5 февраля 2022, 18:47
0
Я это прочитал.Просто предложил немного заложиться на будущее.Это бы расширило спектр анализа стратегии.*hi* 
avatar

ssg

  • 5 февраля 2022, 16:00
0
Тогда уже для полноты возможных вариаций исхода нужно добавить и динамический шаг между ордерами.Причем у лимитных ордеров коэф-ент изменения шага должен быть больше единицы, а у стоповых наоборот меньше единицы.
avatar

ssg

  • 5 февраля 2022, 14:37