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

 
Vladislav Andruschenko:
Спред, если выставлен в текущий. Конечная дата тестирования,  если она выставлена на текущий момент.  Причин ещё может быть много. 

Спред фиксированный, Конечная дата 01.01.18

 
Aidar Kaliaskar:

Спред фиксированный, Конечная дата 01.01.18


стоимость одного пункта..... etc


попробуйте на выходных. 

 

Пробую сделать индикатор на MQL4, который бы на графике "US.500+" строил бы линию по ценам close от "US.30+". В общем чтобы на одном графике были видны ценовые линии двух символов. Ниже код, но не работает. В логах сообщение "indicator on custom buffer is not supported yet". Научите уму разуму, почему не работает. Спс.

#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_color1 clrRed
#property indicator_style1 STYLE_DOT
#property indicator_type1  DRAW_LINE
//---
input string   symbolName="US.30+"; // Symbol name
input double   difference=-22387.0; // Difference from other symbol
//--- price buffer for other symbol
double otherSymbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,otherSymbol,INDICATOR_DATA);
//---
   return INIT_SUCCEEDED;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int     rates_total,
                const int     prev_calculated,
                const int     begin,
                const double &price[])
  {
//---
   for(int i=prev_calculated;i<rates_total;i++)
      otherSymbol[i+1]=iClose(symbolName,PERIOD_CURRENT,i)+difference;
   ArraySetAsSeries(otherSymbol,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Maxim Khrolenko:

Пробую сделать индикатор на MQL4, который бы на графике "US.500+" строил бы линию по ценам close от "US.30+". В общем чтобы на одном графике были видны ценовые линии двух символов. Ниже код, но не работает. В логах сообщение "indicator on custom buffer is not supported yet". Научите уму разуму, почему не работает. Спс.

Потому, что нужно использовать первую форму вызова.
 
Artyom Trishkin:
Потому, что нужно использовать первую форму вызова.
Поменял и ... получилось! Премного благодарен.
 
STARIJ:

Нашел а чем дело - отсчет 60 секунд надо вынести за цикл

Спасибо, спасибо за разъяснения.

Если вместо 60 секунд будет 300.

Время открытия позиций разное, писать нужно с интервалом 300 секунд от времени открытия позиции.

Как в таком случае сделать?

 
lil_lilЕсли вместо 60 секунд будет 300.  ... писать нужно с интервалом 300 секунд от времени открытия позиции.  Как в таком случае сделать?

Мою программу попробовали? Про 300 слабо понял... Если вместо 60 поставить 300 это так? Если скажете, как из этого профит получить - более прилежно вникну!

 

Подскажите с советником, как всегда наверное проблема в банальном, но я не решил ребус

Должен открывать покупку если ema>smma от ema или не доходя до нее point пунктов(то же для продаж). Закрывать сделку на закрытии бара-открытии нового. Следующую открывать точно так же, но уже с условием выше цены открытия предыдущего, то есть last_order_price.

Но по итогу открывается где хочет и закрывается. (на старте теста так вообще открывается и тут же закрывается)

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input int MA_period=10;
input int take=200, stop=200, Magic=1104;
input double lot=0.05;
input int slippage=30;
input int point=5;
double last_order_price,fast_MA,slow_MA;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
 
   if(fast_MA>slow_MA) last_order_price=0;
      else last_order_price=Ask+stop*_Point;

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
   
   if(Bid<=fast_MA+point*_Point && Bid>=fast_MA && fast_MA>slow_MA && SymOrder() && Bid>last_order_price)
   {
      OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,Ask-stop*_Point,Ask+take*_Point,NULL,Magic,0,clrBlue);
      last_order_price=Bid;
   }
   
   if(Bid>=fast_MA-point*_Point && Bid<=fast_MA && fast_MA<slow_MA && SymOrder() && Bid<last_order_price)
   {
      OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,Bid+stop*_Point,Bid-take*_Point,NULL,Magic,0,clrRed);   
      last_order_price=Bid;
   }
      
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_BUY)
   {
      OrderClose(OrderTicket(),lot,Bid,slippage,clrWhite); 
      
   }
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_SELL)
   {
      OrderClose(OrderTicket(),lot,Ask,slippage,clrWhite);  

   }     
      
  }
//+------------------------------------------------------------------+
bool SymOrder()
{
   for(int i=0; i<OrdersTotal(); i++)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) return false;
      }

   return true;
}
 
Roman Sharanov:

Подскажите с советником, как всегда наверное проблема в банальном, но я не решил ребус

Должен открывать покупку если ema>smma от ema или не доходя до нее point пунктов(то же для продаж). Закрывать сделку на закрытии бара-открытии нового. Следующую открывать точно так же, но уже с условием выше цены открытия предыдущего, то есть last_order_price.

Но по итогу открывается где хочет и закрывается. (на старте теста так вообще открывается и тут же закрывается)

Ну как можно подсказать? Сохранить ваш код в буфере обмена, записать в советник, запустить в тестере стратегий? Ну увижу, что открывается и закрывается. И что? Запустить на демо - сегодня суббота, завтра воскресенье, рынок закрыт. Разглядывать глазами? Так это надо в уме держать значения всех переменных. Был раньше способ отладки с карандашом и бумагой - попробуйте. Еще можно перед всеми OrderSelect и OrderClose поставить Alert("Bid=", Bid,"  Fast+P=",Fast_Ema+point*_Point,"  ....) установить в тестере 1 день например с 19 по 20 февраля и потом после теста открыть лог, сделать копию, удалить лишние строчки и анализировать. Еще в MetaEditor есть отладка. Когда научитесь отлаживать ... будет здорово.
 

Где же у него кнопка?

Подскажите, как выравнять текст в элементе управления CSpinEdit из #include <Controls\SpinEdit.mqh> (текстовое поле с инкрементом).

По умолчанию он выровнен по левому краю, а хочется справа.

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