Обращение к индикатору из стратегии

Образцы, куски исходников, вопросы. Обсуждаем программирование.
Ответить
Сообщение
Автор
wellx
Сообщения: 80
Зарегистрирован: Пн окт 23, 2006 9:30 am

Обращение к индикатору из стратегии

#1 Сообщение wellx » Чт ноя 09, 2006 3:23 pm

Как правильно обратиться к индюку, созданному самому, так же как и к стандартным из поставки?

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Обращение к индикатору из стратегии

#2 Сообщение Terranin » Чт ноя 09, 2006 5:22 pm

wellx писал(а):Как правильно обратиться к индюку, созданному самому, так же как и к стандартным из поставки?
Сначала его надо создать в процедуре ResetStrategy, например:

Код: Выделить всё


var
  IndMACD: integer;

procedure ResetStrategy; stdcall;
begin
  IndMACD := CreateIndicator(Currency, Timeframe, 'MACD', '8;20;12;Close');
end;

IndMACD - это хэндл который мы будем использовать дальше при обращении к индикатору.

'MACD' это имя dll без расширения

'8;20;12;Close' это параметры перечисленные через точку с запятой в том порядке как они идут в окне настройки индикатора

Обращение к индикатору:

Код: Выделить всё


  MacdCurrent := GetIndicatorValue(IndMACD, 0, 2);
  MacdPrevious := GetIndicatorValue(IndMACD, 1, 2);

value := GetIndicatorValue(хэндл, индекс, номер буфера);

У индикатора может быть несколько внутренних буферов вот собственно номер буфера и передаем, буфера нумеруются в порядке их создания процедурой CreateIndexBuffer от 0.

У MACD буфера создаются так:

FastEMA := CreateIndexBuffer; // 0
SlowEMA := CreateIndexBuffer; // 1
_MACD := CreateIndexBuffer; // 2
SMA := CreateIndexBuffer; // 3

значит мы обращаемся к буферу номер 2 = _MACD и выбираем оттуда данные по индексам 0 и 1.
Asta la vista
Mike

-=LP=-
Сообщения: 14
Зарегистрирован: Пн янв 22, 2007 11:42 am

Re: Обращение к индикатору из стратегии

#3 Сообщение -=LP=- » Чт янв 25, 2007 1:18 am

Terranin писал(а): Сначала его надо создать в процедуре ResetStrategy, например:

Код: Выделить всё


var
  IndMACD: integer;

procedure ResetStrategy; stdcall;
begin
  IndMACD := CreateIndicator(Currency, Timeframe, 'MACD', '8;20;12;Close');
end;

IndMACD - это хэндл который мы будем использовать дальше при обращении к индикатору.

'MACD' это имя dll без расширения

'8;20;12;Close' это параметры перечисленные через точку с запятой в том порядке как они идут в окне настройки индикатора

Обращение к индикатору:

Код: Выделить всё


  MacdCurrent := GetIndicatorValue(IndMACD, 0, 2);
  MacdPrevious := GetIndicatorValue(IndMACD, 1, 2);

value := GetIndicatorValue(хэндл, индекс, номер буфера);

У индикатора может быть несколько внутренних буферов вот собственно номер буфера и передаем, буфера нумеруются в порядке их создания процедурой CreateIndexBuffer от 0.

У MACD буфера создаются так:

FastEMA := CreateIndexBuffer; // 0
SlowEMA := CreateIndexBuffer; // 1
_MACD := CreateIndexBuffer; // 2
SMA := CreateIndexBuffer; // 3

значит мы обращаемся к буферу номер 2 = _MACD и выбираем оттуда данные по индексам 0 и 1.
С МАКДОМ все понятно, а вот с индикатором Fractals подскажите как быть?
Сижу уже наверное 6-ой час, и так его и так, а он никак! :cry:

Код: Выделить всё

{-----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]));
Подскажите, пожалуйста! :roll:

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Обращение к индикатору из стратегии

#4 Сообщение Terranin » Чт янв 25, 2007 2:00 am

-=LP=- писал(а):С МАКДОМ все понятно, а вот с индикатором Fractals подскажите как быть?
Сижу уже наверное 6-ой час, и так его и так, а он никак! :cry:

Код: Выделить всё

{-----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]));
Подскажите, пожалуйста! :roll:
Индикатор на графике создался? Какие проблемы?
Asta la vista
Mike

-=LP=-
Сообщения: 14
Зарегистрирован: Пн янв 22, 2007 11:42 am

Re: Обращение к индикатору из стратегии

#5 Сообщение -=LP=- » Чт янв 25, 2007 9:56 am

Terranin писал(а):Индикатор на графике создался? Какие проблемы?
Да. На графике создался. Но я не могу понять как работать с его буферами. В хэлпе по ФТ написано: "Fractals up buffer - 0, Fractals down buffer - 1". Так вот мне интересно как это использовать, чтобы например знать когда появился фрактал вверх, а когда вниз. Если Вам не сложно, напишите кусочек кода или просто обьясните на словах! :roll:

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Обращение к индикатору из стратегии

#6 Сообщение Terranin » Чт янв 25, 2007 3:10 pm

-=LP=- писал(а):
Terranin писал(а):Индикатор на графике создался? Какие проблемы?
Да. На графике создался. Но я не могу понять как работать с его буферами. В хэлпе по ФТ написано: "Fractals up buffer - 0, Fractals down buffer - 1". Так вот мне интересно как это использовать, чтобы например знать когда появился фрактал вверх, а когда вниз. Если Вам не сложно, напишите кусочек кода или просто обьясните на словах! :roll:
Ну ты вроде все правильно написал:

fractal := GetIndicatorValue(IndFractals, 0, 0);

получить значение буфера индикатора, первое число индекс в буфере, второе индекс самого буфера. Здесь берем значение индикатора на последнем баре в буфере 0. Т.е. стрелочки вверх ищем, если вернуло 0 то нет стрелочки, иначе вернет значение high бара где стрелочка должна быть нарисовано. Для стрелочек вниз вернет low бара.
Asta la vista
Mike

-=LP=-
Сообщения: 14
Зарегистрирован: Пн янв 22, 2007 11:42 am

Re: Обращение к индикатору из стратегии

#7 Сообщение -=LP=- » Сб янв 27, 2007 12:35 pm

Terranin писал(а):Ну ты вроде все правильно написал:

fractal := GetIndicatorValue(IndFractals, 0, 0);

получить значение буфера индикатора, первое число индекс в буфере, второе индекс самого буфера. Здесь берем значение индикатора на последнем баре в буфере 0. Т.е. стрелочки вверх ищем, если вернуло 0 то нет стрелочки, иначе вернет значение high бара где стрелочка должна быть нарисовано. Для стрелочек вниз вернет low бара.
Ага... Понятно! :wink: Значит значение индикатора берется на последнем баре, но на последнем баре никогда не может образоваться фрактал, поэтому значение будет 0! :o Хорошо... А как тогда проеверить n-ое количество баров назад, что-бы все-таки знать каким был последний фрактал, вверх или вниз!? :cry:
P.S. Я наверное Вас уже достал! :roll: Если что не так, порошу прощения! :oops:

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Обращение к индикатору из стратегии

#8 Сообщение Terranin » Сб янв 27, 2007 2:54 pm

-=LP=- писал(а):
Terranin писал(а):Ну ты вроде все правильно написал:

fractal := GetIndicatorValue(IndFractals, 0, 0);

получить значение буфера индикатора, первое число индекс в буфере, второе индекс самого буфера. Здесь берем значение индикатора на последнем баре в буфере 0. Т.е. стрелочки вверх ищем, если вернуло 0 то нет стрелочки, иначе вернет значение high бара где стрелочка должна быть нарисовано. Для стрелочек вниз вернет low бара.
Ага... Понятно! :wink: Значит значение индикатора берется на последнем баре, но на последнем баре никогда не может образоваться фрактал, поэтому значение будет 0! :o Хорошо... А как тогда проеверить n-ое количество баров назад, что-бы все-таки знать каким был последний фрактал, вверх или вниз!? :cry:
P.S. Я наверное Вас уже достал! :roll: Если что не так, порошу прощения! :oops:
Не на последнем:

fractal_up := GetIndicatorValue(IndFractals, n, 0);
fractal_dn := GetIndicatorValue(IndFractals, n, 1);

все просто ;)
Asta la vista
Mike

-=LP=-
Сообщения: 14
Зарегистрирован: Пн янв 22, 2007 11:42 am

Re: Обращение к индикатору из стратегии

#9 Сообщение -=LP=- » Вс янв 28, 2007 1:13 pm

Terranin писал(а):Не на последнем:

fractal_up := GetIndicatorValue(IndFractals, n, 0);
fractal_dn := GetIndicatorValue(IndFractals, n, 1);

все просто ;)
Спасибо большое!! :wink: Разобрался! :D

aaleksander
Сообщения: 4
Зарегистрирован: Сб июн 04, 2016 3:26 pm

Re: Обращение к индикатору из стратегии

#10 Сообщение aaleksander » Пт июл 01, 2016 10:51 am

Возможно, тема устарела.

Не нашел CreateIndicator. Подскажите, в каком это unitе?

FX Helper
Сообщения: 567
Зарегистрирован: Пн апр 01, 2013 11:44 am

Re: Обращение к индикатору из стратегии

#11 Сообщение FX Helper » Пт июл 01, 2016 1:07 pm

Здравствуйте,

Всю необходимую информацию можете найти в программе Forex Tester -> меню Помощь -> Интерфейс стратегий -> Подпункт "Доступ к индикаторам".
Там Вы найдете описание функции CreateIndicator

aaleksander
Сообщения: 4
Зарегистрирован: Сб июн 04, 2016 3:26 pm

Re: Обращение к индикатору из стратегии

#12 Сообщение aaleksander » Сб июл 02, 2016 7:18 am

FX Helper писал(а):Здравствуйте,

Всю необходимую информацию можете найти в программе Forex Tester -> меню Помощь -> Интерфейс стратегий -> Подпункт "Доступ к индикаторам".
Там Вы найдете описание функции CreateIndicator
Спасибо, со стратегиями разобрался.

А как получить доступ к индикатору из другого индикатора? Например, хочу сделать сигнальные стрелочки по стратегии.

FX Helper
Сообщения: 567
Зарегистрирован: Пн апр 01, 2013 11:44 am

Re: Обращение к индикатору из стратегии

#13 Сообщение FX Helper » Вт июл 05, 2016 11:26 am

Здравствуйте,

В API индикаторов нет возможности доступа к другим индкаторам, только к объектам.
Только стратегии имеют доступ к другим индикаторам.

Сторчоус Виталий
Сообщения: 1
Зарегистрирован: Чт апр 27, 2017 9:40 am

Re: Обращение к индикатору из стратегии

#14 Сообщение Сторчоус Виталий » Чт апр 27, 2017 10:08 am

Здравствуйте. У меня проблема с присоединением индикатора к моей стратегии. Пишу на С++. Вот код (код написал очень простой чтобы не вникать в суть стратегии, а сразу перейти к проблемному месту):

Код: Выделить всё

#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);
	}

}
Компилируется все нормально, устанавливается в Форекс тестер тоже без проблем, а как только включаю стратегию в Форекс тестере выводит ошибку:

Изображение

Помогите пожалуйста разобраться с этой проблемой, потому что никак не могу понять что я делаю не так

Frenus
Сообщения: 7
Зарегистрирован: Сб сен 16, 2017 12:37 pm

Re: Обращение к индикатору из стратегии

#15 Сообщение Frenus » Пн июн 18, 2018 7:45 pm

Благодарю!

Ответить