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

 
Aleksei Skrypnev:

Не могу никак понять почему этот код выдаёт результат всегда 0,0

  long_lot=m_money.CheckOpenLong(m_symbol.Ask(),0);

    short_lot=m_money.CheckOpenShort(m_symbol.Ask(),0);


Кто сталкивался с подобным, какие варианты могут быть сходу? куда копать?

Кто такой "m_money'? 'm_money' был проинициализирован?

[Удален]  
Aleksei Skrypnev:

Не могу никак понять почему этот код выдаёт результат всегда 0,0

  long_lot=m_money.CheckOpenLong(m_symbol.Ask(),0);

    short_lot=m_money.CheckOpenShort(m_symbol.Ask(),0);


Кто сталкивался с подобным, какие варианты могут быть сходу? куда копать?

это может поможет https://www.mql5.com/ru/docs/standardlibrary/expertclasses/expertbaseclasses/cexpert/cexpertlotopenlong

Примечание

Определяет объем торговой операции на покупку (вызов метода CheckOpenLong(...) объекта управления капиталом).

Реализация

//+------------------------------------------------------------------+
//| Method of getting the lot for open long position.                |
//| INPUT:  price - price,                                           |
//|         sl    - stop loss.                                       |
//| OUTPUT: lot for open.                                            |
//| REMARK: no.                                                      |
//+------------------------------------------------------------------+
double CExpert::LotOpenLong(double price,double sl)
  {
   return(m_money.CheckOpenLong(price,sl));
  }
Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert / LotOpenLong
Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert / LotOpenLong
  • www.mql5.com
LotOpenLong(double,double) - CExpert - Базовые классы экспертов - Модули стратегий - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:


https://www.mql5.com/ru/search#!author=Vladimir%20Karputov&module=mql5_module_codebase


По вашему запросу ничего не найдено


Кривовато работает вообще поиск(. В разных вариантах.

 
Mikhail Mishanin:

https://www.mql5.com/ru/search#!author=Vladimir%20Karputov&module=mql5_module_codebase


По вашему запросу ничего не найдено

Это Вы о чем?
 
Vladimir Karputov:
Это Вы о чем?

Поиск работает кривовато, хотел отфильтровать Ваши индикаторы в CodeBase по дате публикации

https://www.mql5.com/ru/search#!keyword=Vladimir%20Karputov&module=mql5_module_codebase&method=2

https://www.mql5.com/ru/search#!keyword=%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80&module=mql5_module_codebase&method=2&author=Vladimir%20Karputov

крайний ближе всего к желаемому. 

 
Mikhail Mishanin:

Поиск работает кривовато, хотел отфильтровать Ваши индикаторы в CodeBase по дате публикации

https://www.mql5.com/ru/search#!keyword=Vladimir%20Karputov&module=mql5_module_codebase&method=2

https://www.mql5.com/ru/search#!keyword=%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80&module=mql5_module_codebase&method=2&author=Vladimir%20Karputov

крайний ближе всего к желаемому. 

Вот эти две ссылки работают. Возможно старый формат ссылки был или было обновление баз сайта.

 
Vladimir Karputov:

Вот эти две ссылки работают. Возможно старый формат ссылки был или было обновление баз сайта.

Конечно работают, только выдают, по моему мнению, совсем не то что ожидаю.

в первой думал увижу первым по дате  https://www.mql5.com/ru/code/33553

во второй затесались другие авторы.

Мелочи это конечно.

 

 Хочется простого. Нужно при набрасывании на чарт нового символа из "Обзора рынка" (то есть при смене символа) распознать это и произвести действие.

#property indicator_chart_window

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);
  }

void OnDeinit(const int reason)
  {
   string old_symbol=_Symbol;
   string new_symbol;

   Print("The current symbol is ",old_symbol,".");

   if(_UninitReason==REASON_CHARTCHANGE)
   {
      new_symbol=_Symbol;
      Print("Was: ",old_symbol,", now: ",new_symbol,".");
   }

   return;
  }

 Набрасываю на USDCHF пару EURUSD, пишет:

2021.02.14 17:56:26.700 test (USDCHF,M20)       The current symbol is USDCHF.
2021.02.14 17:56:26.700 test (USDCHF,M20)       Was: USDCHF, now: USDCHF.

при этом на чарте пара, разумеется, сменяется на EURUSD.  При снятии индикатора с чарта пишет (что уже слишком поздно):

2021.02.14 18:02:54.006 test (EURUSD,M20)       The current symbol is EURUSD.

А ожидается сразу:

2021.02.14 18:00:44.660 test (USDCHF,M20)       The current symbol is USDCHF.
2021.02.14 18:00:44.660 test (USDCHF,M20)       Was: USDCHF, now: EURUSD.

 Что я делаю не так?

EURUSD - Euro vs US Dollar - Курс валют сегодня — Форекс курсы валют
EURUSD - Euro vs US Dollar - Курс валют сегодня — Форекс курсы валют
  • www.mql5.com
EURUSD - Euro vs US Dollar - Графики с курсом по самым популярным валютным парам. Используйте фильтр снизу, чтобы отбирать нужные вам курсы валют. Внутри каждого графика показываются цены спроса и предложения, а также прирост за день.
 
x572intraday:

 Хочется простого. Нужно при набрасывании на чарт нового символа из "Обзора рынка" (то есть при смене символа) распознать это и произвести действие.

 Набрасываю на USDCHF пару EURUSD, пишет:

при этом на чарте пара, разумеется, сменяется на EURUSD.  При снятии индикатора с чарта пишет (что уже слишком поздно):

А ожидается:

 Что я делаю не так?

То что в 

OnDeinit(

поставьте ещё в OnInit и всё станет ясно.

 
x572intraday:

Хочется простого. Нужно при набрасывании на чарт нового символа из "Обзора рынка" (то есть при смене символа) распознать это и произвести действие.

В индикаторе нужно в OnDeinit сохранить символ (например, в глобальных). В OnInit ДОЖДАТЬСЯ выполнения OnDeinit предыдущего индикатора и считать сохраненный символ.
#property indicator_chart_window
#property indicator_plots   0

#include <Init_Sync.mqh> // https://www.mql5.com/ru/code/18138

int OnInit()
{  
  // https://www.mql5.com/ru/forum/189649#comment_4854618
  if (GlobalVariableCheck((string)ChartID()))
  {
    const string PrevSymb = _GlobalVariableGet<string>((string)ChartID());
    
    if (PrevSymb != _Symbol)
      Alert(PrevSymb + " -> " + _Symbol);
    
    _GlobalVariableDel((string)ChartID());  
  }
    
  return(INIT_SUCCEEDED);
}

void OnDeinit( const int Reason )
{
  if (Reason == REASON_CHARTCHANGE)
    _GlobalVariableSet((string)ChartID(), _Symbol + "");
}

void OnChartEvent( const int id,
                   const long& lparam,
                   const double& dparam,
                   const string& sparam )
{
}

void OnTimer()
{
}

int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[] )
{
  return(rates_total);
}
В этом примере создается глобальная со (string)ChartID()-именем. Если на чарте несколько индикаторов, то логика должны быть несколько сложнее.