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

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 соответственно.

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

#define MACRO( x )      ((x) + 2)
struct A {
        A( int, int ) {}
};
template<typename T>
struct B {
        static A a;
};
template<typename T>
A B::a( MACRO(1), 2 ); //error: '(' - declaration without type
А без   template<typename T> - нормально... а какая разница?
A100:

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

А без   template<typename T> - нормально... а какая разница?

Дело в доп. скобках макроса

struct A {
        A(int) {}
};

template<typename T>
struct B {
        static A a;
};
template<typename T>
A B::a((0));

Если их убрать, будет компилироваться.

fxsaber:

Дело в доп. скобках макроса

Если их убрать, будет компилироваться.

Если убрать template<typename T> - тоже будет компилироваться (даже со скобками)
A100:

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

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

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

ИМХО, так было всегда, если размер логов небольшой (здесь где-то на форуме была инфа про размер, при котором начинается сброс кеша). Мне всегда приходилось вызывать контекстное меню, чтобы инициализировать флаш на диск.