Обращение к индикатору из стратегии
-
- Сообщения: 80
- Зарегистрирован: Пн окт 23, 2006 9:30 am
Обращение к индикатору из стратегии
Как правильно обратиться к индюку, созданному самому, так же как и к стандартным из поставки?
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Обращение к индикатору из стратегии
Сначала его надо создать в процедуре ResetStrategy, например:wellx писал(а):Как правильно обратиться к индюку, созданному самому, так же как и к стандартным из поставки?
Код: Выделить всё
var
IndMACD: integer;
procedure ResetStrategy; stdcall;
begin
IndMACD := CreateIndicator(Currency, Timeframe, 'MACD', '8;20;12;Close');
end;
'MACD' это имя dll без расширения
'8;20;12;Close' это параметры перечисленные через точку с запятой в том порядке как они идут в окне настройки индикатора
Обращение к индикатору:
Код: Выделить всё
MacdCurrent := GetIndicatorValue(IndMACD, 0, 2);
MacdPrevious := GetIndicatorValue(IndMACD, 1, 2);
У индикатора может быть несколько внутренних буферов вот собственно номер буфера и передаем, буфера нумеруются в порядке их создания процедурой CreateIndexBuffer от 0.
У MACD буфера создаются так:
FastEMA := CreateIndexBuffer; // 0
SlowEMA := CreateIndexBuffer; // 1
_MACD := CreateIndexBuffer; // 2
SMA := CreateIndexBuffer; // 3
значит мы обращаемся к буферу номер 2 = _MACD и выбираем оттуда данные по индексам 0 и 1.
Asta la vista
Mike
Mike
-
- Сообщения: 14
- Зарегистрирован: Пн янв 22, 2007 11:42 am
Re: Обращение к индикатору из стратегии
С МАКДОМ все понятно, а вот с индикатором Fractals подскажите как быть?Terranin писал(а): Сначала его надо создать в процедуре ResetStrategy, например:
IndMACD - это хэндл который мы будем использовать дальше при обращении к индикатору.Код: Выделить всё
var IndMACD: integer; procedure ResetStrategy; stdcall; begin IndMACD := CreateIndicator(Currency, Timeframe, 'MACD', '8;20;12;Close'); end;
'MACD' это имя dll без расширения
'8;20;12;Close' это параметры перечисленные через точку с запятой в том порядке как они идут в окне настройки индикатора
Обращение к индикатору:
value := GetIndicatorValue(хэндл, индекс, номер буфера);Код: Выделить всё
MacdCurrent := GetIndicatorValue(IndMACD, 0, 2); MacdPrevious := GetIndicatorValue(IndMACD, 1, 2);
У индикатора может быть несколько внутренних буферов вот собственно номер буфера и передаем, буфера нумеруются в порядке их создания процедурой CreateIndexBuffer от 0.
У MACD буфера создаются так:
FastEMA := CreateIndexBuffer; // 0
SlowEMA := CreateIndexBuffer; // 1
_MACD := CreateIndexBuffer; // 2
SMA := CreateIndexBuffer; // 3
значит мы обращаемся к буферу номер 2 = _MACD и выбираем оттуда данные по индексам 0 и 1.
Сижу уже наверное 6-ой час, и так его и так, а он никак!

Код: Выделить всё
{-----Reset strategy--------------------------------------------------------}
procedure ResetStrategy; stdcall;
begin
IndFractals := CreateIndicator(Currency, TimeFrame, 'Fractals', '');
OrderHandle := -1;
end;
{-----Process single tick---------------------------------------------------}
procedure GetSingleTick; stdcall;
var
fractal: double;
begin
// check our currency
if Symbol <> string(Currency) then exit;
// set currency and timeframe
SetCurrencyAndTimeframe(Symbol, TimeFrame);
//check new bar
if Time(0) = LastTime then exit;
LastTime := Time(0);
fractal := GetIndicatorValue(IndFractals, 0, 0);
Print(format('Индикатор: %.4f', [fractal]));

- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Обращение к индикатору из стратегии
Индикатор на графике создался? Какие проблемы?-=LP=- писал(а):С МАКДОМ все понятно, а вот с индикатором Fractals подскажите как быть?
Сижу уже наверное 6-ой час, и так его и так, а он никак!
Подскажите, пожалуйста!Код: Выделить всё
{-----Reset strategy--------------------------------------------------------} procedure ResetStrategy; stdcall; begin IndFractals := CreateIndicator(Currency, TimeFrame, 'Fractals', ''); OrderHandle := -1; end; {-----Process single tick---------------------------------------------------} procedure GetSingleTick; stdcall; var fractal: double; begin // check our currency if Symbol <> string(Currency) then exit; // set currency and timeframe SetCurrencyAndTimeframe(Symbol, TimeFrame); //check new bar if Time(0) = LastTime then exit; LastTime := Time(0); fractal := GetIndicatorValue(IndFractals, 0, 0); Print(format('Индикатор: %.4f', [fractal]));
Asta la vista
Mike
Mike
-
- Сообщения: 14
- Зарегистрирован: Пн янв 22, 2007 11:42 am
Re: Обращение к индикатору из стратегии
Да. На графике создался. Но я не могу понять как работать с его буферами. В хэлпе по ФТ написано: "Fractals up buffer - 0, Fractals down buffer - 1". Так вот мне интересно как это использовать, чтобы например знать когда появился фрактал вверх, а когда вниз. Если Вам не сложно, напишите кусочек кода или просто обьясните на словах!Terranin писал(а):Индикатор на графике создался? Какие проблемы?

- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Обращение к индикатору из стратегии
Ну ты вроде все правильно написал:-=LP=- писал(а):Да. На графике создался. Но я не могу понять как работать с его буферами. В хэлпе по ФТ написано: "Fractals up buffer - 0, Fractals down buffer - 1". Так вот мне интересно как это использовать, чтобы например знать когда появился фрактал вверх, а когда вниз. Если Вам не сложно, напишите кусочек кода или просто обьясните на словах!Terranin писал(а):Индикатор на графике создался? Какие проблемы?
fractal := GetIndicatorValue(IndFractals, 0, 0);
получить значение буфера индикатора, первое число индекс в буфере, второе индекс самого буфера. Здесь берем значение индикатора на последнем баре в буфере 0. Т.е. стрелочки вверх ищем, если вернуло 0 то нет стрелочки, иначе вернет значение high бара где стрелочка должна быть нарисовано. Для стрелочек вниз вернет low бара.
Asta la vista
Mike
Mike
-
- Сообщения: 14
- Зарегистрирован: Пн янв 22, 2007 11:42 am
Re: Обращение к индикатору из стратегии
Ага... Понятно!Terranin писал(а):Ну ты вроде все правильно написал:
fractal := GetIndicatorValue(IndFractals, 0, 0);
получить значение буфера индикатора, первое число индекс в буфере, второе индекс самого буфера. Здесь берем значение индикатора на последнем баре в буфере 0. Т.е. стрелочки вверх ищем, если вернуло 0 то нет стрелочки, иначе вернет значение high бара где стрелочка должна быть нарисовано. Для стрелочек вниз вернет low бара.



P.S. Я наверное Вас уже достал!


- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Обращение к индикатору из стратегии
Не на последнем:-=LP=- писал(а):Ага... Понятно!Terranin писал(а):Ну ты вроде все правильно написал:
fractal := GetIndicatorValue(IndFractals, 0, 0);
получить значение буфера индикатора, первое число индекс в буфере, второе индекс самого буфера. Здесь берем значение индикатора на последнем баре в буфере 0. Т.е. стрелочки вверх ищем, если вернуло 0 то нет стрелочки, иначе вернет значение high бара где стрелочка должна быть нарисовано. Для стрелочек вниз вернет low бара.Значит значение индикатора берется на последнем баре, но на последнем баре никогда не может образоваться фрактал, поэтому значение будет 0!
Хорошо... А как тогда проеверить n-ое количество баров назад, что-бы все-таки знать каким был последний фрактал, вверх или вниз!?
![]()
P.S. Я наверное Вас уже достал!Если что не так, порошу прощения!
fractal_up := GetIndicatorValue(IndFractals, n, 0);
fractal_dn := GetIndicatorValue(IndFractals, n, 1);
все просто

Asta la vista
Mike
Mike
-
- Сообщения: 14
- Зарегистрирован: Пн янв 22, 2007 11:42 am
Re: Обращение к индикатору из стратегии
Спасибо большое!!Terranin писал(а):Не на последнем:
fractal_up := GetIndicatorValue(IndFractals, n, 0);
fractal_dn := GetIndicatorValue(IndFractals, n, 1);
все просто


-
- Сообщения: 4
- Зарегистрирован: Сб июн 04, 2016 3:26 pm
Re: Обращение к индикатору из стратегии
Возможно, тема устарела.
Не нашел CreateIndicator. Подскажите, в каком это unitе?
Не нашел CreateIndicator. Подскажите, в каком это unitе?
-
- Сообщения: 569
- Зарегистрирован: Пн апр 01, 2013 11:44 am
Re: Обращение к индикатору из стратегии
Здравствуйте,
Всю необходимую информацию можете найти в программе Forex Tester -> меню Помощь -> Интерфейс стратегий -> Подпункт "Доступ к индикаторам".
Там Вы найдете описание функции CreateIndicator
Всю необходимую информацию можете найти в программе Forex Tester -> меню Помощь -> Интерфейс стратегий -> Подпункт "Доступ к индикаторам".
Там Вы найдете описание функции CreateIndicator
-
- Сообщения: 4
- Зарегистрирован: Сб июн 04, 2016 3:26 pm
Re: Обращение к индикатору из стратегии
Спасибо, со стратегиями разобрался.FX Helper писал(а):Здравствуйте,
Всю необходимую информацию можете найти в программе Forex Tester -> меню Помощь -> Интерфейс стратегий -> Подпункт "Доступ к индикаторам".
Там Вы найдете описание функции CreateIndicator
А как получить доступ к индикатору из другого индикатора? Например, хочу сделать сигнальные стрелочки по стратегии.
-
- Сообщения: 569
- Зарегистрирован: Пн апр 01, 2013 11:44 am
Re: Обращение к индикатору из стратегии
Здравствуйте,
В API индикаторов нет возможности доступа к другим индкаторам, только к объектам.
Только стратегии имеют доступ к другим индикаторам.
В API индикаторов нет возможности доступа к другим индкаторам, только к объектам.
Только стратегии имеют доступ к другим индикаторам.
-
- Сообщения: 1
- Зарегистрирован: Чт апр 27, 2017 9:40 am
Re: Обращение к индикатору из стратегии
Здравствуйте. У меня проблема с присоединением индикатора к моей стратегии. Пишу на С++. Вот код (код написал очень простой чтобы не вникать в суть стратегии, а сразу перейти к проблемному месту):
Компилируется все нормально, устанавливается в Форекс тестер тоже без проблем, а как только включаю стратегию в Форекс тестере выводит ошибку:

Помогите пожалуйста разобраться с этой проблемой, потому что никак не могу понять что я делаю не так
Код: Выделить всё
#include <windows.h>
#include "StrategyInterfaceUnit.h"
#include "TechnicalFunctions.h"
PChar Currency = NULL;
int Timeframe;
int OrderHandle;
int IndMA;
EXPORT void __stdcall InitStrategy()
{
StrategyShortName("My Strategy");
StrategyDescription("Test");
RegOption("Currency", ot_Currency, &Currency);
RegOption("Timeframe", ot_TimeFrame, &Timeframe);
Timeframe = PERIOD_M15;
}
EXPORT void __stdcall DoneStrategy()
{
free(Currency);
}
EXPORT void __stdcall ResetStrategy()
{
IndMA = CreateIndicator(Currency, Timeframe, "MovingAverage", "55;0;0;Simple (SMA);Close");
SetIndicatorBuffStyle(IndMA, 0, psSolid, 1, clYellow);
}
EXPORT void __stdcall GetSingleTick()
{
if (strcmp(Currency, Symbol()) != 0) return;
SetCurrencyAndTimeframe(Currency, 15);
double x = GetIndicatorValue(IndMA, 0, 0);
if (Bid() < x && OrdersTotal() == 0)
{
SendInstantOrder(Symbol(), op_Sell, 1, Bid() + 50 * Point(), Bid() - 100 * Point(), "", 0, OrderHandle);
}
}

Помогите пожалуйста разобраться с этой проблемой, потому что никак не могу понять что я делаю не так
-
- Сообщения: 7
- Зарегистрирован: Сб сен 16, 2017 12:37 pm
Re: Обращение к индикатору из стратегии
Благодарю!