Обращение к индикатору из стратегии
-
- Сообщения: 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: Обращение к индикатору из стратегии
Ага... Понятно! Значит значение индикатора берется на последнем баре, но на последнем баре никогда не может образоваться фрактал, поэтому значение будет 0! Хорошо... А как тогда проеверить n-ое количество баров назад, что-бы все-таки знать каким был последний фрактал, вверх или вниз!?Terranin писал(а):Ну ты вроде все правильно написал:
fractal := GetIndicatorValue(IndFractals, 0, 0);
получить значение буфера индикатора, первое число индекс в буфере, второе индекс самого буфера. Здесь берем значение индикатора на последнем баре в буфере 0. Т.е. стрелочки вверх ищем, если вернуло 0 то нет стрелочки, иначе вернет значение high бара где стрелочка должна быть нарисовано. Для стрелочек вниз вернет low бара.
P.S. Я наверное Вас уже достал! Если что не так, порошу прощения!
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Обращение к индикатору из стратегии
Не на последнем:-=LP=- писал(а):Ага... Понятно! Значит значение индикатора берется на последнем баре, но на последнем баре никогда не может образоваться фрактал, поэтому значение будет 0! Хорошо... А как тогда проеверить n-ое количество баров назад, что-бы все-таки знать каким был последний фрактал, вверх или вниз!?Terranin писал(а):Ну ты вроде все правильно написал:
fractal := GetIndicatorValue(IndFractals, 0, 0);
получить значение буфера индикатора, первое число индекс в буфере, второе индекс самого буфера. Здесь берем значение индикатора на последнем баре в буфере 0. Т.е. стрелочки вверх ищем, если вернуло 0 то нет стрелочки, иначе вернет значение high бара где стрелочка должна быть нарисовано. Для стрелочек вниз вернет low бара.
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е?
-
- Сообщения: 567
- Зарегистрирован: Пн апр 01, 2013 11:44 am
Re: Обращение к индикатору из стратегии
Здравствуйте,
Всю необходимую информацию можете найти в программе Forex Tester -> меню Помощь -> Интерфейс стратегий -> Подпункт "Доступ к индикаторам".
Там Вы найдете описание функции CreateIndicator
Всю необходимую информацию можете найти в программе Forex Tester -> меню Помощь -> Интерфейс стратегий -> Подпункт "Доступ к индикаторам".
Там Вы найдете описание функции CreateIndicator
-
- Сообщения: 4
- Зарегистрирован: Сб июн 04, 2016 3:26 pm
Re: Обращение к индикатору из стратегии
Спасибо, со стратегиями разобрался.FX Helper писал(а):Здравствуйте,
Всю необходимую информацию можете найти в программе Forex Tester -> меню Помощь -> Интерфейс стратегий -> Подпункт "Доступ к индикаторам".
Там Вы найдете описание функции CreateIndicator
А как получить доступ к индикатору из другого индикатора? Например, хочу сделать сигнальные стрелочки по стратегии.
-
- Сообщения: 567
- Зарегистрирован: Пн апр 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: Обращение к индикатору из стратегии
Благодарю!