Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1940

 
Aleksandr Kononov #:
Ну а память как то проверить можно? Как она расходуется или еще что то?

 допустим на память повлиять можно и он рассчитает 200 индикаторов, но через неделю вы спросите почему не загружается 1000 индикаторов.. итд... замкнутый цикл.. Ставьте корректные задачи..

 
Nikolay Ivanov #:

зависший код нигде не применить.. Задачи нужно ставить выполнимые.. А запороть код можно и проще.. Индикаторы должны работать быстро там нет времени для супер долгих вычислений. 

Знать бы еще эти рамки, в которых можно что то создавать. Начинающему тяжело разбираться с этим, тем более я вообще не программист. Ладно, поищу что можно почитать

 
Aleksandr Kononov #:

Знать бы еще эти рамки, в которых можно что то создавать. Начинающему тяжело разбираться с этим, тем более я вообще не программист. Ладно, поищу что можно почитать

ну обычно хватает одного CCI, максимум 3 :)  а у вас 200.. То что сложно не выходить за рамки - тут согласен.. для этого нужен опыт, поставить верную, выполнимую задачу, которая будет завершена успешно за разумное время - сложно. Поэтому если нужен совет куда копать - то однозначно в сторону оптимизации и минимизации идей..Например CCI с периодом 20 и CCI с периодом 21.. почти одно и тоже и нету смысла рассчитывать оба из них. чем выше период тем меньше эффект, нужно найти разумное количество. Красивое решение всегда работает быстро. 

 
Nikolay Ivanov #:

ну обычно хватает одного CCI, максимум 3 :)  а у вас 200.. То что сложно не выходить за рамки - тут согласен.. для этого нужен опыт, поставить верную, выполнимую задачу, которая будет завершена успешно за разумное время - сложно. Поэтому если нужен совет куда копать - то однозначно в сторону оптимизации и минимизации идей..Например CCI с периодом 20 и CCI с периодом 21.. почти одно и тоже и нету смысла рассчитывать оба из них. чем выше период тем меньше эффект, нужно найти разумное количество. Красивое решение всегда работает быстро. 

Я так понимаю профилировщик поможет измерить расход памяти. Ну значит будем оптимизировать). Но все равно если кто то знает где про это почитать, киньте ссылку пожалста..

 

здравствуйте всем!

подскажите пожалуйста что нужно добавить в код чтобы МА смещалась не только в перед (положительное значение) но и назад (отрицательное значение)

Вот код из советника:

// Параметры советника
input string  sParametersEA = "";     // Параметры советника
input double  Lot           = 0.01;   // Количество лотов
input int     StopLoss      = 30;     // Стоп (SL)
input int     TakeProfit    = 30;     // Тейк (TP)
input int     Slippage      = 3;      // Проскальзование (в пунктах)
input int     Magic         = 1;      // Индентификатор советника
input double  K_Martin1     = 0.01;    // Множитель мартин 1
input double  K_Martin2     = 1.9;    // Множитель мартин 2
input double  K_Martin3     = 1.4;    // Множитель мартин 3
input int     OrdersClose   = 3;      // Ограничение лотности мартин1
input int     OrdersClose2  = 5;      // Ограничение лотности мартин2
input int     DigitsLot     = 2;      // Точность лотности
// Параметры индикатора
input string  sParametersMA = "";     // Параметры индикатора
input int     PeriodMA      = 14;     // Период мувинга
input int     MovingShift   = 1;      // Сдвиг мувинга
// Глобальные переменные
datetime Start,newbar;
double dMA;
double MaxMartinLot;
double MaxMartinLot2;
//+-----------------------------------------------------------------------------------------------+
int OnInit()
  {
Start          = TimeCurrent();
MaxMartinLot   = Lot*MathPow(1.4,OrdersClose);
MaxMartinLot2  = Lot*MathPow(K_Martin2,OrdersClose2);
int Y          = 15;
DrawLABEL("nextlot",1,5,Y,clrLime,""); 
Y += 20;
DrawLABEL("currentlot",1,5,Y,clrLime,"");
Y += 30;
return(INIT_SUCCEEDED);
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Пишем какой лот текущий и какой следующий
      DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
      DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); 
 
   }
 
законопослушный гражданин #:

здравствуйте всем!

подскажите пожалуйста что нужно добавить в код чтобы МА смещалась не только в перед (положительное значение) но и назад (отрицательное значение)

Вот код из советника:

Добавьте к сдвигу нужное отрицательное значение, но чтоб значение + сдвиг были не меньше нуля.

 
ALEKSANDR SOKOLOV #:

Добавьте к сдвигу нужное отрицательное значение, но чтоб значение + сдвиг были не меньше нуля.

спасибо, попробую.

 

Добрый день.

Помогите с кодом, может есть примеры.
Задача:

Есть несколько открытых ордеров, с разными лотами, в разных направлениях. Одни из них зарывается с профитом,  предположим 20. Но есть открытый с отрицательным профитом, предположим -55 с лотами 0,05. Хочу закрыть часть отрицательного ордера на сумму профита положительно закрытого ордера, чтобы уменьшить просадку. 

Пытался написать на основе оператора while, но что то пошло не так.

Заранее спасибо.

 

Здравствуйте, этот код из книги Федосеева. Почему индикатор не отрисовывается в окне, в журнале пишет что он запущен, при компиляции ошибок нет, дополнительное окно открывается(пустое), это код из книги, с моим точно такой-же результат. Что не так?

//+------------------------------------------------------------------+

//|                                                   015 Symbol.mq5 |

//+------------------------------------------------------------------+

#property copyright "Dmitry Fedoseev"

#property link      "mailto:for-good-letter@yandex.ru"

#property version   "1.00"

#property indicator_separate_window

#property indicator_buffers 4

#property indicator_plots   1

//--- plot bar

#property indicator_label1  "bar"

#property indicator_type1   DRAW_CANDLES

#property indicator_color1  clrGray,clrBlue,clrRed

#property indicator_style1  STYLE_SOLID

#property indicator_width1  1

//--- input parameters


input string   symbol="";

input bool     drawBars=false;


string sym;


//--- indicator buffers

double         barBuffer1[];

double         barBuffer2[];

double         barBuffer3[];

double         barBuffer4[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit()

  {

  

   sym=symbol;

   

   StringTrimLeft(sym);

   StringTrimRight(sym);

   

   if(sym==""){

      sym=Symbol();

   }

   

   if(!SymbolSelect(sym,true)){

      Alert("Неизвестный символ ",sym);

      return(INIT_FAILED);

   }

  

   if(drawBars){

      PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_BARS);

   }

   else{

      PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_CANDLES);   

   }

  

//--- indicator buffers mapping

   SetIndexBuffer(0,barBuffer1,INDICATOR_DATA);

   SetIndexBuffer(1,barBuffer2,INDICATOR_DATA);

   SetIndexBuffer(2,barBuffer3,INDICATOR_DATA);

   SetIndexBuffer(3,barBuffer4,INDICATOR_DATA);

   

//---

   return(INIT_SUCCEEDED);

  }


void OnDeinit(const int r){

   Comment("");

   EventKillTimer();

}  

//+------------------------------------------------------------------+

//| 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[])

  {

  

   int bars=Bars(sym,Period());

   

   if(bars==0){

      Comment("Формирование таймфрейма ",sym,"...");

      EventSetTimer(1);

      return(0);   

   }

  

   int start;

   

   if(prev_calculated==0){

      Comment("");

      EventKillTimer();

      datetime tm[1];

      if(CopyTime(sym,Period(),bars-1,1,tm)==-1){

         return(0);

      }

      start=0;

      for(;start<rates_total;start++){

         if(time[start]>=tm[0]){

            break;

         }      

      }

   }

   else{

      start=prev_calculated-1;

   }

   

   MqlRates r[1];

   

   for(int i=start;i<rates_total;i++){

      if(CopyRates(sym,Period(),time[i],1,r)==-1){

         return(0);

      }

      barBuffer1[i]=r[0].open;

      barBuffer2[i]=r[0].high;

      barBuffer3[i]=r[0].low;

      barBuffer4[i]=r[0].close;

   }

   

   return(rates_total);

 }


void OnTimer()

 {

   ChartSetSymbolPeriod(0,Symbol(),Period());

 }


//+------------------------------------------------------------------+ 

Файлы:
 
MatveySt #:

Здравствуйте, этот код из книги Федосеева. Почему индикатор не отрисовывается в окне, в журнале пишет что он запущен, при компиляции ошибок нет, дополнительное окно открывается(пустое), это код из книги, с моим точно такой-же результат. Что не так?


Альт эс вставить код.

И при накидывании индюка Вы инструмент вводите?

Причина обращения: