MrBrooklin #: Единственное, что понял, это якобы существует зависимость разворота ценового графика при значительном повышении волатильности. Кроме того, прочитал несколько тем, связанных с применением индикатора волатильности ATR, но установив его на график, ни чего такого ценного не увидел. Может Вы в сжатой форме подскажете, чем так ценна волатильность для трейдера? Буду очень признателен.
если писать многотомник про Форекс (или вообще про ТА), то 2/3 томов будет так или иначе о волатильности :-)
простейшее практичное применение ATR - в приведённый вами код, добавить параметр "сдвиг". Потому как
И повторится все, как встарь:
Ночь, ледяная рябь канала,
Аптека,улица,фонарь.
Рынок цикличен, периодичен и ATR (средний истинный диапазон, амплитуда волатильности) повторяется раз от раза.
Внутри дня: cдвиньте показания вашего индикатора вправо на PeriodSeconds(PERIOD_D1)/PeriodSeconds(PERIOD_CURRENT)-ATR_PERIOD/2. То есть на кол-во баров за 1 день минус "задержка" от усреднений ATR
получите средний диапазон (дистанция от Open до самого дальнего high/low, разброс цен) каким он был вчера в то-же самое время. Теперь можно сравнить текущий размер свечей с ним и сделать выводы, торговля идёт активнее или наоборот. Уже хорошо
Касаясь вскользь, сугубо техническое: у нас в 99% случаев в TA используются оконные функции, то есть усреднения, сравнения за какой-то период. Они все поголовно барахлят в трёх случаях: когда внутри окон малые почти одинаковые значения, когда на концах окон слишком разные значения и когда значения большие но "в разнобой". Это примерно соотносится с малым и значительным ATR и его разворотами. То есть когда диапазон мал, индикаторы слишком чуствительны и реагируют на малейший шум, а когда резко растёт (или резко падает) то тоже ерунда получается
Maxim Kuznetsov #: Внутри дня: cдвиньте показания вашего индикатора вправо на PeriodSeconds(PERIOD_D1)/PeriodSeconds(PERIOD_CURRENT)-ATR_PERIOD/2. То есть на кол-во баров за 1 день минус "задержка" от усреднений ATR ...
Спасибо, Максим, за уделённое внимание и ответ! Теперь есть над чем подумать.
Благодарю. Правда, так никто и не ответил, что выдает функция индикатора с количеством периодов 0 и почему копируется только 3 элемента и как, если нужно, и нужно ли, скопировать все:
int copy_buffer = CopyBuffer(Handle_ATR, 0, 0,3, atr_array_value);
Такое дело...
Надо сказать, я стал лучше понимать суть волатильности. Раньше думал, что это отклонение цен от средней цены. Но и ATR, и теория говорят, что это коридор цен.
maxvoronin74 #: Благодарю. Правда, так никто и не ответил, что выдает функция индикатора с количеством периодов 0 и почему копируется только 3 элемента и как, если нужно, и нужно ли, скопировать все:
Такое дело...
Надо сказать, я стал лучше понимать суть волатильности. Раньше думал, что это отклонение цен от средней цены. Но и ATR, и теория говорят, что это коридор цен.
Ничего не выдаёт. Минимально может быть 1:
//+------------------------------------------------------------------+//| Average True Range |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
if(rates_total<=ExtPeriodATR)
return(0);
int i,start;
//--- preliminary calculationsif(prev_calculated==0)
{
ExtTRBuffer[0]=0.0;
ExtATRBuffer[0]=0.0;
//--- filling out the array of True Range values for each periodfor(i=1; i<rates_total && !IsStopped(); i++)
ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
//--- first AtrPeriod values of the indicator are not calculateddouble firstValue=0.0;
for(i=1; i<=ExtPeriodATR; i++)
{
ExtATRBuffer[i]=0.0;
firstValue+=ExtTRBuffer[i];
}
//--- calculating the first value of the indicator
firstValue/=ExtPeriodATR;
ExtATRBuffer[ExtPeriodATR]=firstValue;
start=ExtPeriodATR+1;
}
else
start=prev_calculated-1;
//--- the main loop of calculationsfor(i=start; i<rates_total && !IsStopped(); i++)
{
ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
ExtATRBuffer[i]=ExtATRBuffer[i-1]+(ExtTRBuffer[i]-ExtTRBuffer[i-ExtPeriodATR])/ExtPeriodATR;
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
Если ввести значение меньше 1, то будет установлено значение по умолчанию 14:
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+voidOnInit()
{
//--- check for input valueif(InpAtrPeriod<=0)
{
ExtPeriodATR=14;
PrintFormat("Incorrect input parameter InpAtrPeriod = %d. Indicator will use value %d for calculations.",InpAtrPeriod,ExtPeriodATR);
}
else
ExtPeriodATR=InpAtrPeriod;//--- indicator buffers mappingSetIndexBuffer(0,ExtATRBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtTRBuffer,INDICATOR_CALCULATIONS);
//---IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- sets first bar from what index will be drawnPlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpAtrPeriod);
//--- name for DataWindow and indicator subwindow labelstring short_name=StringFormat("ATR(%d)",ExtPeriodATR);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
PlotIndexSetString(0,PLOT_LABEL,short_name);
}
Так сделано в индикаторе. Вы, конечно можете у себя сделать что угодно, но период меньше 1 ничего не даст в расчётах.
Это я интересовался, как можно штатными средствами индикатора получить волатильность текущей свечи.
А касаемо второй части вопроса, "почему копируется только 3 элемента и как, если нужно, и нужно ли, скопировать все", существует какое-то объяснение?
Человек захотел в примере показать как скопировать три бара. Вы можете копировать столько баров, сколько нужно. Но для советника, впрочем и обычно, достаточно знать текущую волатильность. Это вообще только один нулевой, текущий бар.
Artyom Trishkin #: Человек захотел в примере показать как скопировать три бара. Вы можете копировать столько баров, сколько нужно. Но для советника, впрочем и обычно, достаточно знать текущую волатильность. Это вообще только один нулевой, текущий бар.
Подскажите вот так правильно нормировать до 5 знаков после запятой ?
//+------------------------------------------------------------------+//| Export Indicator Values |//+------------------------------------------------------------------+#property description"This Script Export Indicators Values to CSV File."#property description"(You can change the iCustom function parameters to change what indicator to export)"#property copyright"NFTrader"#property version"2.00"#property script_show_inputsinputint IndicatorPeriod=14;
inputstring Indicator_Directory_And_Name="Examples\\RSI";
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
MqlRates rates_array[];
string sSymbol=Symbol();
// Convert Period to string to use it in the file namestring sPeriod=EnumToString(Period());
// Comment to appear in the up left screenComment("Exporting ... Please wait... ");
// Prepare file name, e.g: EURUSD_PERIOD_H1(RSI,14)string ExtFileName; // ="XXXXXX_PERIOD_H1(RSI,14).CSV";
ExtFileName=sSymbol;
int pos=StringFind(Indicator_Directory_And_Name,"\\",0);
string indicatorName=StringSubstr(Indicator_Directory_And_Name,pos+1,-1);
string indicatorPeriod=IntegerToString(IndicatorPeriod);
StringConcatenate(ExtFileName,sSymbol,"_",sPeriod,"(",indicatorName,",",indicatorPeriod,")",".CSV");
ArraySetAsSeries(rates_array,true);
int MaxBar=TerminalInfoInteger(TERMINAL_MAXBARS);
int iCurrent=CopyRates(sSymbol,Period(),0,MaxBar,rates_array);
double IndicatorBuffer[];
SetIndexBuffer(0,IndicatorBuffer,INDICATOR_DATA);
int bars=Bars(sSymbol,PERIOD_CURRENT);
int to_copy=bars;
int rsiHandle=iCustom(sSymbol,PERIOD_CURRENT,Indicator_Directory_And_Name,IndicatorPeriod); // Change here.CopyBuffer(rsiHandle,0,0,to_copy,IndicatorBuffer);
ArraySetAsSeries(IndicatorBuffer,true);
int fileHandle=FileOpen(ExtFileName,FILE_WRITE|FILE_CSV);
for(int i=iCurrent-IndicatorPeriod-1; i>0; i--)
{
string outputData=StringFormat("%s",TimeToString(rates_array[i].time,TIME_DATE));
outputData+=","+TimeToString(rates_array[i].time,TIME_MINUTES);
outputData+=","+ DoubleToString(IndicatorBuffer[i],5);
outputData+="\n";
FileWriteString(fileHandle,outputData);
}
FileClose(fileHandle);
Comment("Exported Successfully");
}
//+------------------------------------------------------------------+
Мой советник не запускается на рабочем столе meta4, даже если я использую предустановленный эксперт, который у них есть. Я выбрал автоторговлю, разрешил торговлю при смене счета, у него есть смайлик и в нижней части в экспертах он показывает, что все хорошо. Так почему же он не открывает сделки?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Единственное, что понял, это якобы существует зависимость разворота ценового графика при значительном повышении волатильности. Кроме того, прочитал несколько тем, связанных с применением индикатора волатильности ATR, но установив его на график, ни чего такого ценного не увидел. Может Вы в сжатой форме подскажете, чем так ценна волатильность для трейдера? Буду очень признателен.
если писать многотомник про Форекс (или вообще про ТА), то 2/3 томов будет так или иначе о волатильности :-)
простейшее практичное применение ATR - в приведённый вами код, добавить параметр "сдвиг". Потому как
Рынок цикличен, периодичен и ATR (средний истинный диапазон, амплитуда волатильности) повторяется раз от раза.
Внутри дня: cдвиньте показания вашего индикатора вправо на PeriodSeconds(PERIOD_D1)/PeriodSeconds(PERIOD_CURRENT)-ATR_PERIOD/2. То есть на кол-во баров за 1 день минус "задержка" от усреднений ATR
получите средний диапазон (дистанция от Open до самого дальнего high/low, разброс цен) каким он был вчера в то-же самое время. Теперь можно сравнить текущий размер свечей с ним и сделать выводы, торговля идёт активнее или наоборот. Уже хорошо
Касаясь вскользь, сугубо техническое: у нас в 99% случаев в TA используются оконные функции, то есть усреднения, сравнения за какой-то период. Они все поголовно барахлят в трёх случаях: когда внутри окон малые почти одинаковые значения, когда на концах окон слишком разные значения и когда значения большие но "в разнобой". Это примерно соотносится с малым и значительным ATR и его разворотами. То есть когда диапазон мал, индикаторы слишком чуствительны и реагируют на малейший шум, а когда резко растёт (или резко падает) то тоже ерунда получается
можно продолжать и продолжать... :-)
Внутри дня: cдвиньте показания вашего индикатора вправо на PeriodSeconds(PERIOD_D1)/PeriodSeconds(PERIOD_CURRENT)-ATR_PERIOD/2. То есть на кол-во баров за 1 день минус "задержка" от усреднений ATR ...
Спасибо, Максим, за уделённое внимание и ответ! Теперь есть над чем подумать.
С уважением, Владимир.
Исправленный вариант:
С уважением, Владимир.
Такое дело...
Надо сказать, я стал лучше понимать суть волатильности. Раньше думал, что это отклонение цен от средней цены. Но и ATR, и теория говорят, что это коридор цен.Благодарю. Правда, так никто и не ответил, что выдает функция индикатора с количеством периодов 0 и почему копируется только 3 элемента и как, если нужно, и нужно ли, скопировать все:
Такое дело...
Надо сказать, я стал лучше понимать суть волатильности. Раньше думал, что это отклонение цен от средней цены. Но и ATR, и теория говорят, что это коридор цен.Ничего не выдаёт. Минимально может быть 1:
Если ввести значение меньше 1, то будет установлено значение по умолчанию 14:
Так сделано в индикаторе. Вы, конечно можете у себя сделать что угодно, но период меньше 1 ничего не даст в расчётах.
Зачем Вам нулевой период расчёта? Смысл какой?
Ничего не выдаёт. Минимально может быть 1:
Если ввести значение меньше 1, то будет установлено значение по умолчанию 14:
Благодарю. Теперь понятно.
Artyom Trishkin #:
Зачем Вам нулевой период расчёта? Смысл какой?
Это я интересовался, как можно штатными средствами индикатора получить волатильность текущей свечи.
А касаемо второй части вопроса, "почему копируется только 3 элемента и как, если нужно, и нужно ли, скопировать все", существует какое-то объяснение?Благодарю. Теперь понятно.
Это я интересовался, как можно штатными средствами индикатора получить волатильность текущей свечи.
А касаемо второй части вопроса, "почему копируется только 3 элемента и как, если нужно, и нужно ли, скопировать все", существует какое-то объяснение?Человек захотел в примере показать как скопировать три бара. Вы можете копировать столько баров, сколько нужно. Но для советника, впрочем и обычно, достаточно знать текущую волатильность. Это вообще только один нулевой, текущий бар.
Хорошая информация. Спасибо.
Подскажите вот так правильно нормировать до 5 знаков после запятой ?
Вот в этом месте
Просто у меня получаются расхождения с реальными даннымиПодскажите вот так правильно нормировать до 5 знаков после запятой ?
Вот в этом месте
Просто у меня получаются расхождения с реальными даннымиА это точно нужно делать так? Просто мне не понятно с какой целью отнимаете период индикатора:
С уважением, Владимир.
Здравствуйте.
Мой советник не запускается на рабочем столе meta4, даже если я использую предустановленный эксперт, который у них есть. Я выбрал автоторговлю, разрешил торговлю при смене счета, у него есть смайлик и в нижней части в экспертах он показывает, что все хорошо. Так почему же он не открывает сделки?
Посоветуйте что-нибудь или помогите?