Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1037

 
Tema97:

а что мне делать теперь ??? у меня стратегия построена на основе канала -  есть альтернативная замена ?  

Есть конечно. Рассчитывайте значения, сохраняйте их в массив или структуру, а уже от-туда берите для советника. Ну и рисовать объектами от-туда же можно - значения есть же.
 
Tema97:

а что мне делать теперь ??? у меня стратегия построена на основе канала -  есть альтернативная замена ?  

А для чего встраивать? Опрашивайте индикатор через iCustom.
Для продажи можно встраивать с помощью #resource (Использование ресурсов)
 
хочу реализовать следующее
возможность добавлять на ОДИН лист разыне таймфреймы (в разхных окнах но на одном листе)
подскажите пожалуйста куда и где копать?)))  возможно ли это если да то это через mql или WInApi?
может есть примеры статьи я найти не смог(
 
kocunyc89:

помогите пожалуйста исправить! выдает ошибку 'Void' - declaration without type     36    4 и куда перердвинуть или вписать return?
//--------------------------------------------------------------------
   Void OnTick()
{

void пишется с маленькой строчной а не большой прописной. Посмотрите, оно другого цвета. Поставьте на это слово курсор и нажмите F1 - часто помогает.

После исправления возникает столько сообщений об ошибках...  Устранил сообщения об ошибках, но логику проверьте сами

#property strict

bool Результат;

extern int   SL             = 200,      //Стоплосс в пунктах
             TStop          = 20,       //
             TStep          = 10,       //
             TP             = 85;       //Тейкпрофит в пунктах
//extern double Lot          = 0.10;     //используется только при risk = 0
extern double Lots           =  0;       // лот, если 0, то динамический
extern double RiskPercentage =  50;      // % от депо на лот, если динамический
extern int    MaxOrders      = 6;        //Максимальное кол-во ордеров одного направления

//--------------------------------------------------------------------
int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;

string txt;
//--------------------------------------------------------------------
int init()
{
   if(Digits==3||Digits==5)
   {
      TStop *=10;
      TStep *=10;
      SL    *=10;
   }
   return(INIT_SUCCEEDED);
}


//--------------------------------------------------------------------
void OnTick()
{
  double Lot = Lots;
  int Ticket = 0;
  if (Lots==0)
  {
    double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
    double minLot = MarketInfo(Symbol(), MODE_MINLOT);
    double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
    double step   = MarketInfo(Symbol(), MODE_LOTSTEP);
    double account = AccountFreeMargin();
    double percentage = account*RiskPercentage/100;
  
    Lot = MathRound(percentage/margin/step)*step;
  
    if(Lot < minLot) Lot = minLot;

    if(Lot > maxLot)Lot = maxLot;
  }

  int buy=0,sell=0;
  for (int i=0; i<OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         tip=OrderType();
         if (tip==0) buy++;
         if (tip==1) sell++;
    }  
  }

  Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
  double TrPr=0,StLo=0;
  double L    = NormalizeDouble(Low[0], Digits);
  double L1   = NormalizeDouble(Low[1], Digits);
  double L2   = NormalizeDouble(Low[2], Digits);
  double L3   = NormalizeDouble(Low[3], Digits);

  double H   = NormalizeDouble(High[0],Digits);
  double H1  = NormalizeDouble(High[1],Digits);
  double H2  = NormalizeDouble(High[2],Digits);
  double H3  = NormalizeDouble(High[3],Digits);

  double O   = NormalizeDouble(Open[0], Digits);
  double O1  = NormalizeDouble(Open[1], Digits);
  double O2  = NormalizeDouble(Open[2], Digits);
  double O3  = NormalizeDouble(Open[3], Digits);

  double C   = NormalizeDouble(Close[0],Digits);
  double C1  = NormalizeDouble(Close[1],Digits);
  double C2  = NormalizeDouble(Close[2],Digits);
  double C3  = NormalizeDouble(Close[3],Digits);

                         //LONG
  if (buy<MaxOrders  && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
    if (Ticket==0)
    Print("Error BUY",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
      TimeBar=Time[0];
    }
  }

                                  //SHORT
  if (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
    if (Ticket==0)
    Print("Error SELL",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
      TimeBar=Time[0];
    }
  }

  Trailing();
}
//!!! куда передвинуть?   return(0);


void Trailing()
{
  for(int i=OrdersTotal() -1; i>=0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      {
        if(OrderType()==OP_BUY)
        {
          if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
          {
            if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
            {
              if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
              Print("Ошибка модификации ордера на покупку");
            }
          }
        }

        if(OrderType()==OP_SELL)
        {
          if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
          {
            if((OrderStopLoss()> (Ask+(TStep+TStop)*Point))  || (OrderStopLoss()==0)  )
            {
              if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
                {
                        Print("Ошибка модификации ордера на продажу");
                }
            }
          }
        }
      }
    }
  }
}

 
LRA:

void пишется с маленькой строчной а не большой прописной. Посмотрите, оно другого цвета. Поставьте на это слово курсор и нажмите F1 - часто помогает.

После исправления возникает столько сообщений об ошибках...  Устранил сообщения об ошибках, но логику проверьте сами


спасибо большое добрый человек!

 
Здравствуйте, господа трейдеры! Написал сигнального робота на основе выложенного мной выше кода. Робот выдает сигналы для опционов, практически точно, да только с отставанием на два бара. Какие нужно внести изменения в код, чтобы выдавались те же результаты, но на два бара раньше? Или такое невозможно? Спасибо.
 
Подскажите пожалуйста - у меня пользовательский индикатор - Канал - мне нужно вернуть значение верхней границы канала - как это сделать ?
 
artmedia70:

Переменная int содержит именно количество секунд с 1970-го года, а переменная datetime содержит дату.

Если вам нужен определённый бар в истории, то неважно как вы его укажите - датой или количеством секунд, в любом случае переменная будет указывать на время открытия именно этого бара, независимо от прихода новых тиков и открытия новых баров.

Спасибо огромное, есть у меня ещё одна загвоздка никак понять не могу что происходит. Есть индикатор, в котором есть функция стат, эта функция дожна счыитаться ТОЛЬКО когда приходит новый сигнал, а эта зараза считается на каждом баре, что я только не делал и нормализовал добле при сравнении, короче жопа. Весь вечер убил, может ктонить пояснить что не так???? Индикатор в атаче в 193 строке происходит вызов функции с условием, однако условие не выполняется и фуркция стат считается при приходе каждого бара, я уже затрахался искать ошибку, Ребята помогите пожалуйста!!!!! Заранее благодарен....
Файлы:
 

Причём выяснил только сейчас что функция стат считается повторно если происходит вызов индикатора из другого индикатора, когда оба на графике. Тоесть один раз она посчиталась для себя, второй раз для индикатора, который её вызывает. Что это такое???

 

Вот на картинке показано следующее. Комент, который вверху. это значение буфера в основном индикаторе, в том в котором происходит расчёт, а принт (внизу) этот же самый буфер, НО только вызванный в другой индикатор и выведен в принт. Разница существенна, НО ПОЧЕМУ!!!!!

первый файл основной, второй в котором происходит вызов буфера из первого.... 

Файлы:
Причина обращения: