Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 226

 

Алексей, спасибо за ваши ответы и вашу помощь. 

Новый вопрос, в МТ4 вообще есть возможно дублировать вкладки с графиком? Ну то есть не шаблоном задавать каждый раз параметры графика, а полностью скопировать вкладку с выбранной валютой, с таймфреймом, с параметрами графика. Есть такое вообще или нет?

 
Rustam Bikbulatov:

Пробую)

Бороться, искать, найти и перепрятать!


ElenkaVladi:

Новый вопрос

Да, не за что.

Самое простое это шаблон. Почему Вам не нравится? Установили таймфрейм, масштаб, цвет фона, цвет свечей, набросали индикаторов нужных и сохранили как default.tpl. Теперь при открытии нового графика всё готово для Вас.

 
Aleksei Stepanenko:


Самое простое это шаблон. Почему Вам не нравится? Установили таймфрейм, масштаб, цвет фона, цвет свечей, набросали индикаторов нужных и сохранили как default.tpl. Теперь при открытии нового графика всё готово для Вас.

Не, вопрос видимо в другом. Пользователь открывая чарт и устанавливая индюк, не знает ни ТФ ни символа. Скрипт нужен выбора символа и ТФ. Ну и индюк можно подгрузить заодно, или шаблон выбрать.)

 
Aleksei Stepanenko:

Бороться, искать, найти и перепрятать!


Да, не за что.

Самое простое это шаблон. Почему Вам не нравится? Установили таймфрейм, масштаб, цвет фона, цвет свечей, набросали индикаторов нужных и сохранили как default.tpl. Теперь при открытии нового графика всё готово для Вас.

Ах вот как это работает, про  default.tpl как раз мысли не было. :))
 

@makssub в ЛС просит под MQL4 код, тогда такой код:

#property strict
//+------------------------------------------------------------------+
void OnStart()
{
   while(!IsStopped())
   {
      int ticket = -1;
      string ord_sym = "";
      int max_pips = INT_MIN;
      for(int i = OrdersTotal() - 1; i >= 0; i--)
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES) || OrderType() > OP_SELL) continue;
         string _sym      = OrderSymbol();
         double sym_point = SymbolInfoDouble(_sym, SYMBOL_POINT);
         double sym_price = OrderType() == OP_BUY ? SymbolInfoDouble(_sym, SYMBOL_BID) : SymbolInfoDouble(_sym, SYMBOL_ASK);
         int ord_pips     = fabs(PriceToInteger(OrderOpenPrice(), sym_point) - PriceToInteger(sym_price, sym_point));
         if(max_pips < ord_pips)
         {
            max_pips = ord_pips;
            ticket = OrderTicket();
            ord_sym = _sym;
         }
      }
      if(ticket < 0) Comment("");
      else Comment("Max pips in order = ", max_pips, " , Symbol = ", ord_sym, " , ticket = ", ticket);
      Sleep(123);
      RefreshRates();
   }
   Comment("");
}
//+------------------------------------------------------------------+
int PriceToInteger( const double Price, const double point )
{
   return((int)(Price / point + 0.1));
}
//+------------------------------------------------------------------+


как закрыть ордер по тикету тут ищите: https://www.mql5.com/ru/forum/131859

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Alexey Viktorov:

Ну, если простыми словами, то так:

Заводим переменную типа datetime и в неё, при закрытии ордера с профитом записываем время текущей свечи D1. И перед открытием очередного ордера сверяем значение этой переменной с временем открытия текущей свечи D1. Соответственно если текущее время больше, то можно открывать. Иначе курим бамбук.

а можете показать на примере, просто пока не хватает опыта реализовать то что вы сказали?
 
Привет всем! Посоветуйте учебник по MQL4 пожалуйста, актуальный на сегодняшний день.
 
Nikolay Grigoryev:
Привет всем! Посоветуйте учебник по MQL4 пожалуйста, актуальный на сегодняшний день.

учебник только один есть старый Ковалева. Актуален в части до 2016 года где-то. Потом в 4ку перенесли многое из 5ки. Слава богу ордерную систему оставили. Больше учебников нет (не находил, ну и другие тоже не нашли). Только статьи здесь и поиск в инете.

 
Valeriy Yastremskiy:

учебник только один есть старый Ковалева. Актуален в части до 2016 года где-то. Потом в 4ку перенесли многое из 5ки. Слава богу ордерную систему оставили. Больше учебников нет (не находил, ну и другие тоже не нашли). Только статьи здесь и поиск в инете.

Спасибо!

 

Написал простой индикатор. При переходе через ноль не прорисовывает линию хотя в буферах значения есть. Подскажите пожалуйста в чем ошибся.

#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

//---- input parameters
extern int    FastEMA=12;  
extern int    SlowEMA=26;  
extern int    Signal=9;  

//---- buffers
double DiffBuffer_up[];
double DiffBuffer_dn[];
//
double MainBuffer[];
double SignalBuffer[];

ENUM_TIMEFRAMES TimeFrame;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   int    draw_begin=MathMax(FastEMA,SlowEMA);
   string short_name="MACD Stephen";
   //---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,DiffBuffer_up);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,DiffBuffer_dn);
   short_name=StringConcatenate(short_name," ("+(string)FastEMA+","+(string)SlowEMA+","+(string)Signal+")");
   IndicatorShortName(short_name);
   SetIndexDrawBegin(0,draw_begin);
   SetIndexDrawBegin(1,draw_begin);
   SetIndexLabel(0,"Up");
   SetIndexLabel(1,"Down");
   IndicatorDigits(6);
   SetLevelValue(0,0);
   
   TimeFrame=GetTF();
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
  int limit, iChart, iTF, delta=0;
  datetime TimeArray[];
  //if(TimeFrame>Period()) delta=(int)MathCeil(TimeFrame/Period());
  int counted_bars=IndicatorCounted();
  //---- check for possible errors
  if(counted_bars<0) return(-1);
  //---- the last counted bar will be recounted
  if(counted_bars>0) counted_bars--;
  limit=Bars-counted_bars+delta;

  ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
  ArraySetAsSeries(MainBuffer,true);
  ArraySetAsSeries(SignalBuffer,true);
  ArrayResize(MainBuffer,  100000);
  ArrayResize(SignalBuffer,100000);
  
  iTF=0;
  for(iChart=0; iChart<limit; iChart++)
  {
      while(Time[iChart]<TimeArray[iTF]) iTF++;
      MainBuffer[iChart]=EMPTY_VALUE;
      SignalBuffer[iChart]=EMPTY_VALUE;
      MainBuffer[iChart]  =iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_MAIN,iTF);
      SignalBuffer[iChart]=iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_SIGNAL,iTF);
      double diff=MainBuffer[iChart]-SignalBuffer[iChart];
      
      if (diff>0) {
         DiffBuffer_up[iChart]=diff;
         DiffBuffer_dn[iChart]=EMPTY_VALUE;
      }
      else {
         DiffBuffer_dn[iChart]=diff;
         DiffBuffer_up[iChart]=EMPTY_VALUE;
      }
  }
  return(0);
}

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

//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES GetTF() {

   switch (Period()) {
      case PERIOD_M1:  return PERIOD_M5;
      case PERIOD_M5:  return PERIOD_M15;
      case PERIOD_M15: return PERIOD_M30;
      case PERIOD_M30: return PERIOD_H1;
      case PERIOD_H1:  return PERIOD_H4;
      case PERIOD_H4:  return PERIOD_D1;
      case PERIOD_D1:  return PERIOD_W1;
      case PERIOD_W1:  return PERIOD_MN1;
   }
   
   return (ENUM_TIMEFRAMES)Period();

}
//+------------------------------------------------------------------+

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