Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1300

Вынес в настройки индикатора пределы шкалы:
   if (Fixid_Scale == Yes)
      {
      IndicatorSetDouble (INDICATOR_MAXIMUM, Scale_Value);   
      IndicatorSetDouble (INDICATOR_MINIMUM,-Scale_Value);   
      }

Fixid_Scale - настроечный input-параметр.

При установке пределов - работает.
При отмене - не возвращается в режим плавающих пределов шкалы.

Как программно отменить однажды установленные пределы шкалы?

wgomer:


При работе онлайн (не в тестере стратегий) используйте ChartIndicatorAdd

Vladimir Karputov:

При работе онлайн (не в тестере стратегий) используйте ChartIndicatorAdd

Супер! Спасибо огромное!
Все удалось.
Век живи - век учись :-)

Vladimir Karputov, а мне?)

User_mt5:

Vladimir Karputov, а мне?)

Не могу точно сказать, но попробуйте 0,0


Добавлено: похоже отменить 'INDICATOR_MINIMUM' и 'INDICATOR_MAXIMUM' при помощи MQL5 нельзя.

Vladimir Karputov:

Не могу точно сказать, но попробуйте 0,0


Добавлено: похоже отменить 'INDICATOR_MINIMUM' и 'INDICATOR_MAXIMUM' при помощи MQL5 нельзя.

Увы..

Спасибо за ответ.

(с уровнями, вообще говоря, та же проблема; но решается установкой количества уровней)

User_mt5:

Увы..

Спасибо за ответ.

(с уровнями, вообще говоря, та же проблема; но решается установкой количества уровней)

Экспериментируйте и всё получится.

User_mt5:


Сравнил свойства, которые сохраняет график (на примере индикатора 'Stochastic Oscillator')



<indicator>
name=Stochastic Oscillator
path=
apply=0
show_data=1
scale_inherit=0
scale_line=0
scale_line_percent=50
scale_line_value=0.000000
scale_fix_min=1
scale_fix_min_val=0.000000
scale_fix_max=1
scale_fix_max_val=100.000000
expertmode=0
fixed_height=-1


<indicator>
name=Stochastic Oscillator
path=
apply=0
show_data=1
scale_inherit=0
scale_line=0
scale_line_percent=50
scale_line_value=0.000000
scale_fix_min=0
scale_fix_min_val=-10.500000
scale_fix_max=0
scale_fix_max_val=110.500000
expertmode=0
fixed_height=-1


Это явно свойство типа 'bool', но доступа к этому свойству из языка MQL5 нет.

Vladimir Karputov:

Сравнил свойства, которые сохраняет график (на примере индикатора 'Stochastic Oscillator')

Это явно свойство типа 'bool', но доступа к этому свойству из языка MQL5 нет.

Да, увы.

Спасибо ещё раз)

Есть проблема. Используя функцию (см. ниже) можно получить значения ТейкПрофита и СтопЛосса по ID позиции из истории (то есть когда позиция уже закрыта), эта функция работает в реал тайме, но в тестере стратегий почему то не может определить ТейкПрофит и СтопЛосс, так как не видит исторические ордера, которыми устанавливаются стопы (важно, что стопы устанавливаются после открытия позиции)

Вопрос, как в тестере стратегий, по тикету закрытой позиции узнать ТП/СЛ этой позиции?

#include <Trade\DealInfo.mqh>
#include <Trade\HistoryOrderInfo.mqh>

CDealInfo deal;
CHistoryOrderInfo ord;


void GetPosStops(ulong ticket, int& tp, int& sl, double& lot){
   HistorySelectByPosition(ticket);
   tp=0;sl=0;
   double open=0, tp_=0, sl_=0;
   string symbol="";
   ENUM_DEAL_TYPE type=-1;
   for(int i=0; i<HistoryDealsTotal(); i++){
      if(!deal.SelectByIndex(i))continue;
      if(deal.Entry() ==DEAL_ENTRY_IN){
         open=deal.Price();
         symbol=deal.Symbol();
         type=deal.DealType();
         lot=deal.Volume();
         break;
      }
   }
   for(int i=0; i<HistoryOrdersTotal(); i++){
      if(!ord.SelectByIndex(i))continue;
      if(tp_==0)tp_=ord.TakeProfit();
      if(sl_==0)sl_=ord.StopLoss();
      if(tp_>0 && sl_>0)break;
   }
   if(symbol !=""){
      double coef=type==DEAL_TYPE_BUY ? 1:-1;
      double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
      if(tp_>0 && coef*tp_>coef*open)
         tp=(int)(MathAbs(tp_-open)/point);
      if(sl_>0 && coef*sl_<coef*open)
         sl=(int)(MathAbs(sl_-open)/point);   
   }
}