Мой первый советник на Stochastic. Помогите! - страница 4

 

В коде их нужно прописать вот здесь:

//внешние параметры
extern int Period_K =14; // Период K
extern int Period_D =3; // Период D

... ... ... ... ... ... ... 
//----------------------------------------------------------
if ( (iStochastic(NULL,0, Period_K,Period_D,3,MODE_SMA,1,MODE_SIGNAL,0)-
 iStochastic(NULL,0, Period_K,Period_D,3,MODE_SMA,1,MODE_MAIN,0)) >0);//продажа

if ( (iStochastic(NULL,0, Period_K,Period_D,3,MODE_SMA,1,MODE_MAIN,0)-
iStochastic(NULL,0, Period_K,Period_D,3,MODE_SMA,1,MODE_SIGNAL,0)) >0);//покупка


В тестере есть опция ОПТИМИЗАЦИЯ (в поиске наберите)

Про оптимизацию вот тут есть немного  'Как не попасть в ловушки оптимизации?'



 
skunk >>:

..только потом их надо будет прописывать где-то в коде, для меня это новая головная боль :) лучше я их из кода буду менять... хоть знаю где...

..а что такое оптимизация? не, ну галку-то я вижу, а что дает она (оптимизация) и как функционирует?

Не валяйте дурака, выносите, не пожалеете :))

Оптимизация автоматически прогоняет советник несколько раз, меняя внешние переменные по заданной Вами схеме в свойствах эксперта (вкладка оптимизация): начальное значение>>шаг>>конечное значение. Это основа, без которой Вам двигаться будет некуда.

 
о как! Пойду пробовть :)
 
Привет всем!

вобщем голову я себе уже сломал, мучая этот Стохастик, сам замучился... Добился вот такого результата:


Strategy Tester Report
Stochastic 1_4
Activtrades-Server (Build 224)

СимволGer30Jun09 (DAX June 09 CFD)
Период30 Минут (M30) 2009.01.08 16:00 - 2009.06.17 20:00
МодельВсе тики (наиболее точный метод на основе всех наименьших доступных таймфреймов)
ПараметрыPeriod_K=14; Period_D=3; Period_Z=3; Period_T=30; Lots=0.1; Prots=30;

Баров в истории3174Смоделировано тиков1425596Качество моделирования62.40%
Ошибки рассогласования графиков4




Начальный депозит500.00



Чистая прибыль5732.50Общая прибыль10365.00Общий убыток-4632.50
Прибыльность2.24Матожидание выигрыша77.47

Абсолютная просадка272.50Максимальная просадка1360.00 (50.63%)Относительная просадка63.31% (392.50)

Всего сделок74Короткие позиции (% выигравших)36 (61.11%)Длинные позиции (% выигравших)38 (50.00%)

Прибыльные сделки (% от всех)41 (55.41%)Убыточные сделки (% от всех)33 (44.59%)
Самая большаяприбыльная сделка823.75убыточная сделка-773.75
Средняяприбыльная сделка252.80убыточная сделка-140.38
Максимальное количествонепрерывных выигрышей (прибыль)7 (1237.50)непрерывных проигрышей (убыток)3 (-822.50)
Максимальнаянепрерывная прибыль (число выигрышей)1250.00 (3)непрерывный убыток (число проигрышей)-822.50 (3)
Среднийнепрерывный выигрыш2непрерывный проигрыш1


19-го числа июньский DAX поменялся на сентябрьский. Немного еще помучив себя и Стохастик получилось не хуже:


Strategy Tester Report
Stochastic 1_4
Activtrades-Server (Build 224)

СимволGer30Sep09 (DAX September 09 CFD)
Период30 Минут (M30) 2009.03.30 16:00 - 2009.06.22 19:00
МодельВсе тики (наиболее точный метод на основе всех наименьших доступных таймфреймов)
ПараметрыPeriod_K=14; Period_D=3; Period_Z=3; Period_T=30; Lots=0.1; Prots=30;

Баров в истории1704Смоделировано тиков550189Качество моделирования60.83%
Ошибки рассогласования графиков0




Начальный депозит500.00



Чистая прибыль3400.00Общая прибыль8108.75Общий убыток-4708.75
Прибыльность1.72Матожидание выигрыша23.78

Абсолютная просадка208.75Максимальная просадка1226.25 (30.26%)Относительная просадка56.37% (376.25)

Всего сделок143Короткие позиции (% выигравших)70 (37.14%)Длинные позиции (% выигравших)73 (47.95%)

Прибыльные сделки (% от всех)61 (42.66%)Убыточные сделки (% от всех)82 (57.34%)
Самая большаяприбыльная сделка711.25убыточная сделка-603.75
Средняяприбыльная сделка132.93убыточная сделка-57.42
Максимальное количествонепрерывных выигрышей (прибыль)7 (952.50)непрерывных проигрышей (убыток)12 (-588.75)
Максимальнаянепрерывная прибыль (число выигрышей)952.50 (7)непрерывный убыток (число проигрышей)-1141.25 (8)
Среднийнепрерывный выигрыш2непрерывный проигрыш3




Можно сказать, что - работает. Мой Первый Советник - работает!!! :)))

запустил сегодня в реале, сижу, жду, оттапырив карманы :)


Это все хорошо, но работает он на одной таймфрейме, а мне надо, чтоб с проверкой на трех. Помогите это организовать. Как их, таймфреймы, вообще прписывать в код?
 
skunk >>:
Привет всем!

вобщем голову я себе уже сломал, мучая этот Стохастик, сам замучился...

Это все хорошо, но работает он на одной таймфрейме, а мне надо, чтоб с проверкой на трех.

Это потому, что "таймфрейма" - не женского рода а мужского.

Надо говорить правильно - таймфрейм ! 

И тогда всё заработает . На всех таймфреймах.

А вообще -то, таймфрейм прописывается в самом индикаторе. 

Вот так (вторая позиция):

//--------------------------------------------------------------

double iStochastic( string symbol, int timeframe, int %Kperiod, int %Dperiod, int slowing, int method, int price_field, int mode, int shift) 

Параметры:
symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ. 
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика. 
%Kperiod - Период(количество баров) для вычисления линии %K. 
%Dperiod - Период усреднения для вычисления линии %D. 
slowing - Значение замедления. 
method - Метод усреднения. Может быть любым из значений методов скользящего среднего (Moving Average). 
price_field - Параметр выбора цен для расчета. Может быть одной из следующих величин: 0 - Low/High или 1 - Close/Close. 
mode - Индекс линии индикатора. Может быть любым из значений идентификаторов линий индикаторов. 
shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад). 
 //---------------------------------------------------------

Вы сюда напишите, как вы вызываете стохастик в вашем советнике. И мы подскажем, где таймфрейм конкретно прописывается..


 
да, как раньше вызывал, так и вызываю, тоько все вынес во внешние переменные:

extern int    Period_K  =14;       // Период K
extern int    Period_D  =3;        // Период D
extern int    Period_Z  =3;        // Период замедление
extern int    Period_T  =30;       // Период ТаймФрейм

M_0 = iStochastic(NULL,Period_T,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_MAIN,  0);    // 0 бар
M_1 = iStochastic(NULL,Period_T,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_MAIN,  1);    // 1 бар
S_0 = iStochastic(NULL,Period_T,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_SIGNAL,0);    // 0 бар
S_1 = iStochastic(NULL,Period_T,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_SIGNAL,1);    // 1 бар


Я наверное не правильно выразил, чего мне надо. Сейчас работает на одном таймфрейме - М30, т.е. если K>D, то BUY и наоборот, а мне надо, чтоб если на М30 K=D, то проверяем на H1, если там тоже K=D, то проверем на H4.
 

Вряд ли вы дождетесь такого момента, когда K=D !

Не будет такого. Потому, что значения D и К возвращаются в коде с 4-мя знаками после запятой. 

Это на графике иной раз кажется, что эти значения равны. Но на самом деле они могут отличаться на тысячные доли и вероятность их равенства практически равна нулю.

Так что не мучайтесь с этим.

 

долго ждать не пришлось :)




вот этого я и хочу избежать...

 

Вы думаете, что если стохастик залип вверху, то значения линий равны? 

Не уверен. Впрочем,   надо вывести в  функцию comment и глянуть.

Но я понял, что вы хотите.

Вы хотите в случае, если линии стохастика начинают залипать (т.е. приближаются к нулю или к 100) обратиться в старшим тф.

Тогда вам надо соотв. задать эти значения (напр.) в глоб. переменных, а потом вызывать эти значения:

Для тф=н1 :

M_0_h1 = iStochastic(NULL,60,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_MAIN,  0);    // 0 бар
M_1_h1 = iStochastic(NULL,60,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_MAIN,  1);    // 1 бар
S_0_h1 = iStochastic(NULL,60,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_SIGNAL,0);    // 0 бар
S_1_h1 = iStochastic(NULL,60,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_SIGNAL,1);    // 1 бар

Для тф=н4:

M_0_h4 = iStochastic(NULL,240,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_MAIN,  0);    // 0 бар
M_1_h4 = iStochastic(NULL,240,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_MAIN,  1);    // 1 бар
S_0_h4 = iStochastic(NULL,240,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_SIGNAL,0); 
S_1_h4 = iStochastic(NULL,240,Period_K,Period_D,Period_Z,MODE_SMA,1,MODE_SIGNAL,1);

Ну а потом, задаете условия. Например, если стохастик на м30 больше 99,9 -  то сравниваем значения стохастика с тф=н1 и входим уже по этим новым условиям

 
rid >>:

Вы думаете, что если стохастик залип вверху, то значения линий равны?

Не уверен. Впрочем, надо вывести в функцию comment и глянуть.

Почему не уверены? Там ведь стоят данные: Stoch(14,3,3) 100.0000 100.0000