[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 797

 

Друзья-товарищи! Это моя попытка №2 создать чудо-юдо, считывающее инфу с ROC AUDUSD и GBPUSD, для торговли по GBPAUD!!:)) Проба пера - примитивно, но очень захотелось попробовать!!! Когда прогоняю на тестере без оптимизации ОН ВИСНЕТ НЕСЛАБО!, однако продолжает давать loaded successfully... а в итоге -ни одной торговой операции. Ну ясно, что я напортачила, но где, подскажите, плз, знающие люди!!!:)) Это код так.наз. советника.БЕрет данные от обычного пользовательского ROC

//+------------------------------------------------------------------+
//|                                                    Robot_Rocky_Rich |
//|                                                          JonsonAlla |
//|                                                    deep_ampik@bk.ru |
//+------------------------------------------------------------------+

extern double TakeProfit = 700;
extern double Sl = 200;
extern double Lots = 0.01;
             
//+------------------------------------------------------------------+
int start()
 {
  int cnt, ticket;
  double x1= iCustom("AUDUSD",PERIOD_H1,"ROC",12,1,0);
  double x2= iCustom("GBPUSD",PERIOD_H1,"ROC",12,1,0); 
  
  
     
  /**total=OrdersTotal();
  if(total<1)//проверка количества ордеров 
   {
   if(AccountFreeMargin()<(1000*Lots))
    {
     Print("Недостаточно средств = ", AccountFreeMargin());
     return(0);  
    }**/
  if (x1<x2)
   {
    ticket=OrderSend("GBPAUD",OP_BUY,Lots,Ask,30,Bid-Sl*Point,Ask+TakeProfit*Point,"-",0,0,Green);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция BUY : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии BUY позиции : ",GetLastError());          
    return(0);
   }
  if (x1>x2) 
   {
    ticket=OrderSend("GBPAUD",OP_SELL,Lots,Bid,30,Ask+Sl*Point,Bid-TakeProfit*Point,"-",0,0,Red);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция SELL : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии SELL позиции : ",GetLastError());
    return(0); 
   }
   return(0);
  }
  
 
Vinin:

IndicatorCounted() в советниках не работает. Он предназначен только для индикаторов. Может стоить немного проблему рассширить. Есть разные пути решения. Самый простой - оптимизация индикатора (но не всегда возможно), Можно переносить расчеты в советник, но опять не всегда возможно. На самом деле смотреть индикатор надо

ну вот я хочу перенести код расчета в советник, в индюке код расчета начинается с цикла. .как его заменить на более корректный7

int CountedBars=IndicatorCounted();
if(CountedBars< 0) CountedBars= 0;
if(CountedBars> 0) CountedBars--;
cnt = Bars - CountedBars;

for(int i = 0; i < cnt ;i++)
 
obla4ko:

Друзья-товарищи! Это моя попытка №2 создать чудо-юдо, считывающее инфу с ROC AUDUSD и GBPUSD, для торговли по GBPAUD!!:)) Проба пера - примитивно, но очень захотелось попробовать!!! Когда прогоняю на тестере без оптимизации ОН ВИСНЕТ НЕСЛАБО!, однако продолжает давать loaded successfully... а в итоге -ни одной торговой операции. Ну ясно, что я напортачила, но где, подскажите, плз, знающие люди!!!:)) Это код так.наз. советника.БЕрет данные от обычного пользовательского ROC


Попробуйте с примитивным контролем загрузки истории

Файлы:
 
Vinin:


Попробуйте с примитивным контролем загрузки истории

попробовала - то же самое..:(( может некорректно просто сравнивать х1 и х2, а нужно их к чему-то прикрепить, скажем, к последнему бару?По логике индикатора советник должен открыть хотя бы одну позицию, и не закрывать ее, так как закрытие в проге не предусмотрено..:)), а ROC одной валюты всегда больше ROC другой...

 

Может вызов индикатора не совсем корректный. Сейчас поищу его у себя. Просто кажется что буфер должен быть нулевым, а не первым.

 

У меня подобного индикатора нету

 
T-G:

ну вот я хочу перенести код расчета в советник, в индюке код расчета начинается с цикла. .как его заменить на более корректный7

1. Зачем?????????????????????

Но, если очень надо, то

2. Я, млять, чего, в пустоту отвечаю??? Скажал же - в статьях (это здесь же, ссылочка наверху) есть статья Косицына по этому поводу. Вам сколько раз это нужно повторить? Может, вам чем др. заняться?

 
Vinin:

У меня подобного индикатора нету

Вот код индикатора ROC

//+------------------------------------------------------------------+
//|                                                          ROC.mq4 |
//|                                    Copyright © 2006, Robert Hill |
//+------------------------------------------------------------------+

#property  copyright "Copyright © 2006, Robert Hill"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property  indicator_color1  Red
//---- indicator parameters
extern int RPeriod = 12;
extern bool UsePercent = true;
//---- indicator buffers
double RateOfChange[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0, DRAW_LINE);
   SetIndexDrawBegin(0, RPeriod);
   IndicatorDigits(Digits + 1);
//---- indicator buffers mapping
   if(!SetIndexBuffer(0, RateOfChange))
       Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("ROC(" + RPeriod + ")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   double ROC, CurrentClose, PrevClose;
   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if(counted_bars < 0) 
       return(-1);
//---- last counted bar will be recounted
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars - RPeriod;
//---- ROC calculation
   for(int i = 0; i < limit; i++)
     {
       CurrentClose = iClose(NULL, 0, i);
       PrevClose = iClose(NULL, 0, i + RPeriod);
       ROC = CurrentClose - PrevClose;
       //----
       if(UsePercent)
         {
           if(PrevClose != 0)
               RateOfChange[i] = 100 * ROC / PrevClose;
         }
       else
           RateOfChange[i] = ROC;
     }   
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
 

"А полы помыть никому не надо? А то я приду - помою! " (с)

Вот Перенос кода индикатора в код эксперта.

 
obla4ko:

Вот код индикатора ROC


В коде индикатора заложена ошибка.
Причина обращения: