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

 

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

встроенная функция ограничения количества открываемых ордеров внутри часового бара (один бар - один ордер) -не работает. Причину найти пока не удалось.

думаю, может создать новую и добавить в советник?

подскажите пожалуйста какие функции существуют для того, чтобы ограничить количество открывающихся ордеров в единицу времени?

 
законопослушный гражданин #:

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

встроенная функция ограничения количества открываемых ордеров внутри часового бара (один бар - один ордер) -не работает. Причину найти пока не удалось.

думаю, может создать новую и добавить в советник?

подскажите пожалуйста какие функции существуют для того, чтобы ограничить количество открывающихся ордеров в единицу времени?

Флаги существуют булевы. У Вас условия, новый бар, флаг нет ордеров, открывается ордер по сигналу И флаг нет ордеров, флаг ставим есть ордера. На новом баре флаг ставим нет ордеров.

Если в единицу времени, алгоритм другой, надо запомнить время во время открытия ордера и флаг есть ордера, прибавить период времени, и если время станет больше искомого флаг нет ордеров.

 
Valeriy Yastremskiy #:

Флаги существуют булевы. У Вас условия, новый бар, флаг нет ордеров, открывается ордер по сигналу И флаг нет ордеров, флаг ставим есть ордера. На новом баре флаг ставим нет ордеров.

Если в единицу времени, алгоритм другой, надо запомнить время во время открытия ордера и флаг есть ордера, прибавить период времени, и если время станет больше искомого флаг нет ордеров.

спасибо. Попробую сейчас разобраться!

а вы открывали мой код или  просто предполагаете?:  ..... У Вас условия, новый бар, флаг нет ордеров, открывается ордер......

 
законопослушный гражданин #:

спасибо. Попробую сейчас разобраться!

а вы открывали мой код или  просто предполагаете?:  ..... У Вас условия, новый бар, флаг нет ордеров, открывается ордер......

Код не смотрел. Это стандартные решения. Флаги глабальные или статичные, если в теле функции объявляете.
 
законопослушный гражданин #:

чтобы ограничить количество открывающихся ордеров в единицу времени?

datetime LastTime=0;

void OnTick()
   {
   if(LastTime==iTime(Symbol(),0,0) return;
   LastTime=iTime(Symbol(),0,0);
   
   }
 
Aleksei Stepanenko #:

Спасибо.

 

в советнике нашел вот такую функцию:

/+-----------------------------------------------------------------------------------+
//|        Собираем статистику                                                        |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fGet_Statistic()
{
    int err = GetLastError();
//----
    gd_Balance = AccountBalance();
    gd_Equity = AccountEquity();
    gd_FreeMargin = AccountFreeMargin();
    gd_Margin = AccountMargin();
    //---- Фиксируем время в "настоящий момент"
    gdt_curTime = TimeCurrent();
    if (fCCV_D (OrdersHistoryTotal(), 3))                   //fControlChangeValue_D Фиксирует факт изменения проверяемого double параметра с погрешностью (deviation)  
    {
        //---- Считаем статистику по удалённым ордерам
        gd_PribulALL = 0.0;
        double ld_Pribul = 0.0;
        int li_tmp_HistoryOrders = 0;
        gi_HistoryOrders = 0;
        ArrayInitialize (gia_HistoryOrders, 0);
        for (int li_MG = 0; li_MG < cnt_MG; li_MG++)
        {
            ld_Pribul = fCalculate_Pribul (li_tmp_HistoryOrders, gia_MG[li_MG]);
            gda_Pribul[li_MG] = ld_Pribul;
            gd_PribulALL += ld_Pribul;
            gi_HistoryOrders += li_tmp_HistoryOrders;
            gia_HistoryOrders[li_MG] += li_tmp_HistoryOrders;
            gda_BaseBalance[li_MG] = BaseBalance + ld_Pribul;
        }
        gd_BaseBalance = BaseBalance + gd_PribulALL;
        //---- По результатам работы каждого сета, устанавливаем приоритет исполнения
        if (Use_Prioritity) {fRun_Sort (gia_Priority, gda_Pribul);}
    }
    //---- Фиксируем пиковую точку баланса
    gd_MAXBalance = MathMax (gd_MAXBalance, gd_Balance);
    //---- Получаем текущие значения переменных для отображения на графике
    fCheckInfo();
    //---- Контролируем возможные ошибки
    fGetLastError (gsa_Comment, "fGet_Statistic()", ind_ERR);
//----
}

кто может объяснить, смысл выражения (выделено желтым) ?

р.с. Автора "нет наличии"

 
Alexey Viktorov #:

Вот вопросы были

Может хоть теперь ответите на эти вопросы?

Для чего нужно? Ну у меня несколько индикаторов iMA и чисто для визуализации.

Ну и естественно для вывода на график.

Alexey, получается, что нет возможности изменить программно цвет   технического индикаторе iMA?

 
vladeimirami #:

Для чего нужно? Ну у меня несколько индикаторов iMA и чисто для визуализации.

Ну и естественно для вывода на график.

Alexey, получается, что нет возможности изменить программно цвет   технического индикаторе iMA?

Напрямую нет. Но я ведь не зря пытаю вас… Есть другие способы. Разве сложно ответить на прямой вопрос: Это для визуализации в тестере? Да или нет и всё. Потом я могу дать другой совет как поступить или задать ещё один вопрос для понимания что сделать лучше. Ведь не обязательно биться головой в закрытые ворота…

 

Здравствуйте. Подскажите, пожалста, весь мозг сломал. 

Делаю один индикатор одновременно отображающий два индикатора "AMA" и два "M a" (не сток). Первые два "AMA" имеют по одному буферу, два  "M a"  по 3 буфера, INDICATOR_DATA, INDICATOR_COLOR_INDEX, INDICATOR_CALCULATIONS.

Первые собирал поочередно, сначала два  "AMA", потом добавил один  "M a", все было корректно, последний  "M a" не отображается, хотя в буфере данные есть и в окне данных есть. Думаю проблема в очередности буферов.

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   4

#property indicator_label1  "AMA_1"
#property indicator_type1   DRAW_LINE
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "AMA_2"
#property indicator_type2   DRAW_LINE
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

#property indicator_label3  "M a 1"
#property indicator_type3   DRAW_COLOR_LINE
#property indicator_style3  STYLE_SOLID
#property indicator_width3  2

#property indicator_label4  "M a 2"
#property indicator_type4   DRAW_COLOR_LINE
#property indicator_style4  STYLE_SOLID
#property indicator_width4  2
SetIndexBuffer(2,maBuffer_1 ,INDICATOR_DATA);         ArraySetAsSeries(maBuffer_1 ,true);
   SetIndexBuffer(3,maColors_1 ,INDICATOR_COLOR_INDEX);  ArraySetAsSeries(maColors_1 ,true);
   SetIndexBuffer(4,atrBuffer_1,INDICATOR_CALCULATIONS);         ArraySetAsSeries(atrBuffer_1,true);
   
   PlotIndexSetString(2,PLOT_LABEL,"Ma1");
   
   int iLength = (inpLength_1>0) ? inpLength_1 : 1;
   
      maHandle_1  = iMA(NULL,0,iLength,0,Method_1,Price_1);
      atrHandle_1 = iATR(NULL,0,atrBars);
      PlotIndexSetInteger(2,PLOT_COLOR_INDEXES,20);
      for (int i=0; i<20; i++) 
               PlotIndexSetInteger(2,PLOT_LINE_COLOR,i,gradientColor(i,20,ColorTo_1,ColorFrom_1));
               
///////////**************///////////////////***************////////////////////

   SetIndexBuffer(5,maBuffer_2 ,INDICATOR_DATA);         ArraySetAsSeries(maBuffer_2 ,true);
   SetIndexBuffer(6,maColors_2 ,INDICATOR_COLOR_INDEX);  ArraySetAsSeries(maColors_2 ,true);
   SetIndexBuffer(7,atrBuffer_2,INDICATOR_CALCULATIONS);         ArraySetAsSeries(atrBuffer_2,true);
   
   //PlotIndexSetString(5,PLOT_LABEL,"Ma2");
   
    iLength = (inpLength_2>0) ? inpLength_2 : 1;
   
      maHandle_2  = iMA(NULL,0,iLength,0,Method_2,Price_2);
      atrHandle_2 = iATR(NULL,0,atrBars);
      PlotIndexSetInteger(5,PLOT_COLOR_INDEXES,20);
      for (int i=0; i<20; i++) 
               PlotIndexSetInteger(5,PLOT_LINE_COLOR,i,gradientColor(i,20,ColorTo_2,ColorFrom_2));
Файлы:
Xma_01.mq5  36 kb