Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
ТОП СООБЩЕНИЙ
16.03.2015, 13:53
Лучший ответ
Выплачено: 2849 RUB
Чё не кто не знает как стохастик вычислить? Алгоритм опишите пожалуйста, очень надо!
16.03.2015, 15:51
Лучший ответ
Выплачено: 15893 RUB
Сообщение от m0t0d0r Посмотреть сообщение
Алгоритм опишите пожалуйста, очень надо!
_http://webmastermaksim.ru/foreks/indikator-stoxastik-foreks-oscilyator-stochastic-ego-opisanie-nastrojka-parametry-i-raznovidnosti.html
17.03.2015, 15:12
Лучший ответ
Выплачено: 46952 RUB
Сообщение от m0t0d0r Посмотреть сообщение
Нумерация баров идет от Х до 0, где 0 самый старый
hg() lw() cl() обеспечивают доступ к истории котировок
kArr() dArr() массивы в которых хранятся данные.
Не знаю как происходит организация в ДЛЛ, но на mql в терминале нумерация баров для предопределенных переменных начинается с несформировавшегося. Т.е. 0 - это текущий бар, а самый старый, видимый на графике - Bars()-1;
25.03.2015, 15:41
Лучший ответ
Выплачено: 2849 RUB
Сообщение от Sanic Посмотреть сообщение
Не знаю как происходит организация в ДЛЛ, но на mql в терминале нумерация баров для предопределенных переменных начинается с несформировавшегося. Т.е. 0 - это текущий бар, а самый старый, видимый на графике - Bars()-1;
А я и не знал, чё теперь делать? Sanic если я написал, что нумерация перевернута, значит так надо было. А вопрос стоял иначе, алгоритм стоха, cgon благодарствую, уже разобрался.
  • #1 Свернуть

    Нужна помощь, Stochastic алгоритм и формула

    Доброго времени!
    Я пишу советник на основе стохастика, все действия производятся в ДЛЛ. Потому что я лучше знаю другой язык, он выигрывает по скорости, поддерживает многопоточность и более гибок. В связи с этим возникла необходимость переписать стохастик именно в длл, но при этом возникли проблеммы.

    Мои действия
    1) Рассчёт стохастика по формуле 100*((Close-MinK)/(MaxK-MinK)), в цикле.
    2) тройное усреднение стоха по ранее рассчитанным данным.

    Вот тут и возникла проблемма. Первое усреднение (быстрый стохастик) проходит правильно, а последующие усреднения начинают врать, давая неправильный результат. Я подозреваю, что дело именно в усреднении и приравнивании линии D к линии K.

    Выкладываю исходник, надеюсь поможет
    MQL код:
    Procedure.d iStochastic(period.l, index.l, kPeriod.l=5, dPeriod.l=3, deceleration.l=1)
    ; ################################################## ##################################################
    If period<#PERIOD_M1 Or Period>#PERIOD_D1:ProcedureReturn #False:EndIf
    If kPeriod<0 Or dPeriod<0 Or deceleration<0:ProcedureReturn #False:EndIf
    If deceleration<=0:deceleration = 1:EndIf
    ; ################################################## ##################################################
    Protected i.l
    Protected a.l
    Protected b.l
    Protected c.l
    Protected BarsNum.l = 10
    Protected stop.l
    Protected stop2.l
    Protected kMin.d
    Protected kMax.d
    Protected dResult.d
    Protected dNum.l
    Protected position.l
    Protected Dim kArr.d(dperiod+dPeriod+1+BarsNum)
    Protected Dim dArr.d(dperiod+dPeriod+1+BarsNum)
    ; ################################################## ##################################################
    If index-(dperiod+dPeriod+1+BarsNum)<0:ProcedureReturn #False:EndIf
    ; ################################################## ##################################################
    stop = index-(dperiod+dPeriod+1+BarsNum)
    If stop<0:stop = 0:EndIf
    For i=index To stop Step -1
    position = Abs(index-i)
    kMin = 0
    kMax = 0
    stop2 = i-kPeriod+1
    If stop2<0:stop2 = 0:EndIf
    For a=i To stop2 Step -1
    If kMax<hg(Period,a):kMax = hg(Period,a):EndIf
    If kMin=0 Or kMin>lw(Period,a):kMin = lw(Period,a):EndIf
    Next a
    kArr(position) = 100*((cl(period,i)-kMin)/(kMax-kMin))
    Next i

    For i=1 To deceleration
    stop = (dPeriod+BarsNum)
    For a=0 To stop
    If dArr(a)>0:kArr(a) = dArr(a):EndIf
    Next a

    For a=0 To stop
    dNum = 0
    stop2 = a+dPeriod-1
    For b=a To stop2
    dArr(a) = dArr(a)+kArr(b)
    dNum = dNum + 1
    Next b
    dArr(a) = dArr(a)/dNum
    Next a
    Next i

    Protected str.s
    For i=0 To 5
    str = str + StrD(kArr(i))+" --- "+StrD(darr(i))+#CRLF$
    Next i
    MessageRequester("", str)
    ; ################################################## ##################################################
    ProcedureReturn kArr(0)
    EndProcedure

    Тут многое может быть непонятно.
    Нумерация баров идет от Х до 0, где 0 самый старый
    hg() lw() cl() обеспечивают доступ к истории котировок
    kArr() dArr() массивы в которых хранятся данные.

    Если в исходнике сложно разобраться, не могли бы вы описать подробно алгоритм, буквально по пунктам. Спасибо.
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Чё не кто не знает как стохастик вычислить? Алгоритм опишите пожалуйста, очень надо!

    Комментарий

    • #3 Свернуть

      Сообщение от m0t0d0r Посмотреть сообщение
      Алгоритм опишите пожалуйста, очень надо!
      _http://webmastermaksim.ru/foreks/indikator-stoxastik-foreks-oscilyator-stochastic-ego-opisanie-nastrojka-parametry-i-raznovidnosti.html

      Комментарий

      • #4 Свернуть

        Сообщение от m0t0d0r Посмотреть сообщение
        Нумерация баров идет от Х до 0, где 0 самый старый
        hg() lw() cl() обеспечивают доступ к истории котировок
        kArr() dArr() массивы в которых хранятся данные.
        Не знаю как происходит организация в ДЛЛ, но на mql в терминале нумерация баров для предопределенных переменных начинается с несформировавшегося. Т.е. 0 - это текущий бар, а самый старый, видимый на графике - Bars()-1;

        Комментарий

        • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
        • #5 Свернуть

          Сообщение от Sanic Посмотреть сообщение
          Не знаю как происходит организация в ДЛЛ, но на mql в терминале нумерация баров для предопределенных переменных начинается с несформировавшегося. Т.е. 0 - это текущий бар, а самый старый, видимый на графике - Bars()-1;
          А я и не знал, чё теперь делать? Sanic если я написал, что нумерация перевернута, значит так надо было. А вопрос стоял иначе, алгоритм стоха, cgon благодарствую, уже разобрался.

          Комментарий

          working...
          X