Ошибки, баги, вопросы - страница 1921

 

Ошибка при компиляции

template<typename T1, typename T2>
void f( T2 t )
{
        Print( typename( T1 ), ":", typename( T2 ), ":", t );
}
void OnStart()
{
        char ch = 5;
        f<int>( ch ); //(1) //error: 'f' - wrong template parameters count
}

компилируется запись

         f<int,char>( ch ); //(2)
которая содержит избыточную информацию и кроме того неоднозначность если ch не char. Более того в макросе информация о типе ch в общем случае недоступна (зависит от контекста)
 
A100:

Ошибка при компиляции

А разве в плюсах так можно?

 
Комбинатор:

А разве в плюсах так можно?

С++ компилирует оба варианта, но (1) представляется более правильным и интуитивно понятным. Во (2) нужно держать в уме еще и типы, что неудобно и вместо упрощения - получаем излишнее усложнение которое отчетливо видно, если в <> несколько typename 
 

не исчезают оповещения, все перепробовал, все прочитано, на сайте мкл оповещений нет только в терминале..


 
Vladimir Pastushak:

не исчезают оповещения, все перепробовал, все прочитано, на сайте мкл оповещений нет только в терминале..

Так с самого начала было.

Тут была тема, в которой обнаружилось, какой файл нужно удалить, чтобы они отметились прочитанными. Но потом все равно появляются "приведения".

 
Здравствуйте. Кто подскажет, почему котировки по золоту на демо всё чаще отсутствуют?
 

Оперативно не обновляются .log файлы %AppData%\MetaQuotes\Terminal\...\MQL5\Logs\YYYYMMDD.log

Обновление происходит только: после перезагрузки терминала или при выборе меню Просмотр. Если с начала суток не перезагружать и не выбирать Просмотр - то соответствующий файл будет пустой

Раньше то все работало (и даже открытый в MetaEditor YYYYMMDD.log файл сам обновлялся через несколько секунд после вывода строк во вкладке Эксперты) и не нужно было совершать лишних неочевидных действий

 

Доброй ночи! В советнике есть RSI и STO и вот никак не могу сделать так чтобы, когда сработал сигнал на покупку или продажу, то он открывался на новой свече, а не на текущей!!

код такой:

void OnTick(){

for (int i=0; i<OrdersTotal(); i++)

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber()) 
return;

double RSI0 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, 0);
double RSI1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, 1);

double STO0=iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, STO_LOWHIGH, MODE_MAIN, 0);
double STO1=iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, STO_LOWHIGH, MODE_MAIN, 1);

double STO2 = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, STO_LOWHIGH, MODE_SIGNAL, 0);
double STO3 = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, STO_LOWHIGH, MODE_SIGNAL, 1);

double SL=0,TP=0;

if (RSI1 < RSIDownLevel && RSIDownLevel < RSI0 && STO2 < STO0){

if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits);
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss* Point,Digits); 
if (OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,NUL L,Magic)==-1) Print(GetLastError());
}

if (RSI1 > RSIUpLevel && RSIUpLevel > RSI0 && STO3 > STO1){

if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits);
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss* Point,Digits); 
if (OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bi d,Digits),slippage,SL,TP,NULL,Magic)==-1) Print(GetLastError()); 
}

return(0);


Опять же повторюсь что у меня срабатывает открытие ордера на текущей свече, а мне надо что бы ордер открывался на следующей!!! Помогите сделать пожалуйста!!

 
sviter-pro:

Доброй ночи! В советнике есть RSI и STO и вот никак не могу сделать так чтобы, когда сработал сигнал на покупку или продажу, то он открывался на новой свече, а не на текущей!!

Опять же повторюсь что у меня срабатывает открытие ордера на текущей свече, а мне надо что бы ордер открывался на следующей!!! Помогите сделать пожалуйста!!


//+------------------------------------------------------------------+
void OnTick()
  {

   for(int i=0; i<OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
            return;

   double RSI0 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, 0);
   double RSI1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, 1);

   double STO0=iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, STO_LOWHIGH, MODE_MAIN, 0);
   double STO1=iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, STO_LOWHIGH, MODE_MAIN, 1);

   double STO2 = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, STO_LOWHIGH, MODE_SIGNAL, 0);
   double STO3 = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, STO_LOWHIGH, MODE_SIGNAL, 1);

   double SL=0,TP=0;
   
   if(NewBar())
     {
      if(RSI1<RSIDownLevel && RSIDownLevel<RSI0 && STO2<STO0)
        {

         if(takeprofit!=0) TP=NormalizeDouble(Ask+takeprofit*Point,Digits);
         if(stoploss!=0) SL=NormalizeDouble(Ask-stoploss *Point,Digits);
         if(OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,NUL L,Magic)==-1) Print(GetLastError());
        }

      if(RSI1>RSIUpLevel && RSIUpLevel>RSI0 && STO3>STO1)
        {

         if(takeprofit!=0) TP=NormalizeDouble(Bid-takeprofit*Point,Digits);
         if(stoploss!=0) SL=NormalizeDouble(Bid+stoploss *Point,Digits);
         if(OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bi d,Digits),slippage,SL,TP,NULL,Magic)==-1) Print(GetLastError());
        }
     }

   return(0);
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime time=0;
   if(time==0)
     {
      time=Time[0];
      return false;
     }
   if(time!=Time[0])
     {
      time=Time[0];
      return true;
     }
   return false;
  }
//+------------------------------------------------------------------+
 
sviter-pro:

Доброй ночи! В советнике есть RSI и STO и вот никак не могу сделать так чтобы, когда сработал сигнал на покупку или продажу, то он открывался на новой свече, а не на текущей!!

код такой:

Опять же повторюсь что у меня срабатывает открытие ордера на текущей свече, а мне надо что бы ордер открывался на следующей!!! Помогите сделать пожалуйста!!

Вы берёте значения индикаторов с баров 0 и 1.

Вместо 0 и 1 берите значения с 1 и 2 соответственно.

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