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

 

Помогите пожалуйсто. Не могу разобраться с циклом for(), все время после обновления, из за смещения (iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)) ,индикатор перерисовывает!


//+------------------------------------------------------------------+
//|                                                         help.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property strict
#include <MovingAverages.mqh>
//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  clrSilver
#property  indicator_color2  clrRed
#property  indicator_width1  2

//--- indicator parameters
input int SignalSMA=8;            // Signal SMA Period
//--- indicator buffers
double    ExtBuffer[];
double    ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
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 i,limit;
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- counted in the 1-st buffer
   for(i=0;i<limit;i++)
      ExtBuffer[i]=(
                    iMA(NULL,PERIOD_CURRENT,1,0,MODE_SMA,PRICE_HIGH,i)
                    +iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)
                    );
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,SignalSMA,ExtBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+

За ранее благодарю.

 
Alexey Viktorov:

На мой взгляд вообще подход не логичный. Зачем определять день недели? Какая разница какой сегодня день, если в условии должно быть "сегодня не открывать больше xxx ордеров"?

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

не хватает определения даты открытия ордера.


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

 
cripple:

Помогите пожалуйсто. Не могу разобраться с циклом for(), все время после обновления, из за смещения (iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)) ,индикатор перерисовывает!


За ранее благодарю.

в ма-шках разные ТФ-мы. нужно как бы вписать старший тайфрейм в ТФ М1, т.е. дважды посчитать МА с разным количеством тиков. При этом одно и то же значение старшего периода будет прибавляться к разным младьшего.

Перебирая i у Вас сейчас берутся к примеру 10 свеч периода D1 и 10 M1. Логически что то не то....

Другое дело, если индикатор устанавливается на М1, там будет работать без перерисовки скорее всего

 
Renat Akhtyamov:

в ма-шках разные ТФ-мы. нужно как бы вписать старший тайфрейм в ТФ М1, т.е. дважды посчитать МА с разным количеством тиков.

Перебирая i у Вас сейчас берутся к примеру 10 свеч периода D1 и 10 M1. Логически что то не то....

Да вы верно подметили, но моего ума пока не хватает чтоб понять как заставить M1 счетать правильно 
 
cripple:
Да вы верно подметили, но моего ума пока не хватает чтоб понять как заставить M1 счетать правильно 

кроме этого нужно будет синхронизировать М1 с более старшим ТФ-мом по времени, потому что далеко не факт, что 1 бар М5 будет соответствовать 5-ти свечкам М1, может быть и 4-ре и 1.

 
cripple:
Да вы верно подметили, но моего ума пока не хватает чтоб понять как заставить M1 счетать правильно 

Попробуй 

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );

время i-того бара и полученный номер бара вместо i поставить.

 
подскажите пожалуйста можно ли с помощью клавиатуры листать открытые пары в терминале мт4
 
LRA:
Уважаемый novikov433 !!! Научу Вас программированию, или напишу Вам бесплатно советник или и то и другое!!!  В замен научите, как убыточные ордера переводятся в безубыток. Можно на простом примере. Даю жене приказ (ордер): рано утром на базаре купить ведро картошки, а к 10 часам (фундаментальный анализ) цена возрастает - продать. Но иногда к пол-десятому (новости) привозят машину картошки. И цена (на новостях) сразу вниз, и уже до конца дня, а то и на всю неделю. Ставлю СтопЛосс - если цена убавится на 10 руб, сразу продавай, как сможешь (по рыночной цене). Как изменить приказ, чтоб исключить убыток. Если интересен такой вариант - напишите в личку свое мыло.
ну на том примере, что если рынок немного сходил в нужную сторону и потом пошел обратно, то нужно просто закрыть сделку по безубытку и открыть на реверс. бокер fx open с ecn счетом. как вы вобще во все это ело вникаете)))? я как только начинаю, сразу какой то ступор ловлю. щас ещё лишний раз убедился что руками торговать полный бред. как вот вобще взять и понять зачем столько состовляющих нужно писать в коде?
 
Alexey Viktorov:

Попробуй 

время i-того бара и полученный номер бара вместо i поставить.


Вы думали что то наподобие этого?
//+------------------------------------------------------------------+
//|                                                         help.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Averages Convergence/Divergence"
#property strict
#include <MovingAverages.mqh>
//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  clrSilver
#property  indicator_color2  clrRed
#property  indicator_width1  2

//--- indicator parameters
input int SignalSMA=8;            // Signal SMA Period
//--- indicator buffers
double    ExtBuffer[];
double    ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
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 i,limit;
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- counted in the 1-st buffer
   for(i=0;i<limit;i++)
     {
      int bars=iBarShift(Symbol(),PERIOD_M1,iTime(Symbol(),PERIOD_CURRENT,i),false);
      ExtBuffer[i]=(
                    iMA(NULL,PERIOD_CURRENT,1,0,MODE_SMA,PRICE_HIGH,i)
                    +iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,bars)
                    );
      Print(bars);
     }
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,SignalSMA,ExtBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
ax00071:
Благодарю за внимание )) Вот я лопух . . . . . . на закрытии у меня стояло условие в пятницу в 22:00 закрывать сделку, без доп условий на проверку типа сделки. А сама сделка закрылась на пару часов раньше. Ну и когда стукнуло 22:00 советник начал отправлять ордера на закрытие уже закрытого ордера . . . . .
Вряд ли стоит обзывать себя растением. Если сумел локализовать, осмыслить и исправить такую ошибку - значит приблизился к званию программист!
Причина обращения: