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

 
Alexey G. Smolyakov:
Полный путь папки MQL4\Indicators\Used. Вроде бы за пределы папки нет выхода. Но это отклонение от темы - другие советники работают со своими индикаторами в подобных папках без проблем. Но что за беда с этим индикатором - не понимаю. Смотрел его код, но знаний и опыта разобраться не хватает. Есть подозрение, что он считает только последний бар или что-то такое.

тогда все ОК

нажмите в терминале Ctrl +D - откроется окно данных, бросьте индикатор на график и в окне данных Вы увидите индикаторные буфера и их значения на каждом баре, эти же цифры Вы получаете через iCustom()

ЗЫ; бывают индикаторы которые на некоторых барах имеют значение EMPTY_VALUE - в окне данных будет пустая клетка (не факт, что автор индикатора не назначил к примеру 0.0 вместо EMPTY_VALUE - нужно проверять)

тогда при вызове iCustom() нужно сравнивать полученное значение с EMPTY_VALUE . Поищите в кодобазе или советников на ЗигЗаге или выгрузку ЗигЗага в файл - там увидите готовый пример как работать с пустыми значениями индикатора EMPTY_VALUE 

 
Igor Makanu:

тогда все ОК

нажмите в терминале Ctrl +D - откроется окно данных, бросьте индикатор на график и в окне данных Вы увидите индикаторные буфера и их значения на каждом баре, эти же цифры Вы получаете через iCustom()

ЗЫ; бывают индикаторы которые на некоторых барах имеют значение EMPTY_VALUE - в окне данных будет пустая клетка (не факт, что автор индикатора не назначил к примеру 0.0 вместо EMPTY_VALUE - нужно проверять)

тогда при вызове iCustom() нужно сравнивать полученное значение с EMPTY_VALUE . Поищите в кодобазе или советников на ЗигЗаге или выгрузку ЗигЗага в файл - там увидите готовый пример как работать с пустыми значениями индикатора EMPTY_VALUE 

Спасибо, проверка значений на EMPTY_VALUE помогла.
 
Добрый день. Как сделать функцию, показывающую что выставлено в настройках (Only Long / Only Short / Long & Short). Попробовал так, но не работает 
string LSset()
{
string LS;
if (SymbolInfoInteger(Symbol(),SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_LONGONLY) LS="ONLY LONG";
if (SymbolInfoInteger(Symbol(),SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_SHORTONLY) LS="ONLY SHORT";
if (SymbolInfoInteger(Symbol(),SYMBOL_TRADE_MODE) != SYMBOL_TRADE_MODE_SHORTONLY && 
   SymbolInfoInteger(Symbol(),SYMBOL_TRADE_MODE) != SYMBOL_TRADE_MODE_LONGONLY) LS="LONG & SHORT";
return(LS);
}
Файлы:
 
Lomonosov1991:
Добрый день. Как сделать функцию, показывающую что выставлено в настройках (Only Long / Only Short / Long & Short). Попробовал так, но не работает 

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

 
fxsaber:

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

поиск рулит, несколько лет назад разработчики обещали сделать доступ из эксперта к этим настройкам, но так и не сделали

решение https://www.mql5.com/ru/forum/121619#comment_3208150

решение с dll, не знаю зачем оно нужно https://www.mql5.com/ru/forum/231434/page2#comment_6773340

ЗЫ: не проверял, но поиском по темам, вроде проблема не сохранения этих настроек при применении шаблона графика осталась

LongOnly, ShortOnly or Long&Short?
LongOnly, ShortOnly or Long&Short?
  • 2009.11.03
  • www.mql5.com
Не подсажет ли кто нибудь как внутри советника оределить в каком режиме он запущен LongOnly, ShortOnly or Long&Short? Заранее спасибо...
 
extern int punkt=100;
extern int Ordersss=3;
extern double xxx=1.2;

int PunktsX()
{
   int P=punkt;                             
   int i;
   for(i=Ordersss; i<NumberOfPositions(); i++)
   P*=xxx;
   return(P);
}

сделал функцию, на усредняющего советника. если открыто больше 3 ордеров, то каждый последующий ордер будет открыт дальше.

но не могу исправить предупреждение (possible loss of data due to type conversion)

подскажите плиз как быть)

 
Lomonosov1991:

сделал функцию, на усредняющего советника. если открыто больше 3 ордеров, то каждый последующий ордер будет открыт дальше.

но не могу исправить предупреждение (possible loss of data due to type conversion)

подскажите плиз как быть)

P=(int)(P*xxx);

Для более точного расчета наверно лучше так

extern int punkt=100;
extern int Ordersss=3;
extern double xxx=1.2;

int PunktsX()
{
   double P=punkt;                             
   int i;
   for(i=Ordersss; i<NumberOfPositions(); i++)
   P*=xxx;
   return (int)P;
}
 
Konstantin Nikitin:

Для более точного расчета наверно лучше так

спасибо) я и не знал что с return можно так сделать)

 
Igor Makanu:

поиск рулит, несколько лет назад разработчики обещали сделать доступ из эксперта к этим настройкам, но так и не сделали

решение https://www.mql5.com/ru/forum/121619#comment_3208150

решение с dll, не знаю зачем оно нужно https://www.mql5.com/ru/forum/231434/page2#comment_6773340

ЗЫ: не проверял, но поиском по темам, вроде проблема не сохранения этих настроек при применении шаблона графика осталась

спасибо, попробую)

 
Lomonosov1991:

спасибо, попробую)

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Expert

fxsaber, 2019.06.04 16:40

// MT4-советник показывает, в каком режиме Long/Short был запущен.

#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

int GetLongShortFlag( const int Chart_ID = 0 )
{
  MqlParam Params[];
  string Names[];
  
  const int Res = EXPERT::Parameters(Chart_ID, Params, Names);
  
  return(((Res & 3) << 1) + (Res & 1));
}

string LongShortToString( const int Chart_ID = 0 )
{
  const int Flag = GetLongShortFlag(Chart_ID);
  string Str = NULL;
  
  if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY) && (bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Long & Short";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY))
    Str = "Only Long";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Only Short";
    
  return(Str);
}

int OnInit()
{
  Alert(LongShortToString());
  
  return(INIT_FAILED);
}
Причина обращения: