Страница 1 из 1

Access Violation при установке индикатора

Добавлено: Пн мар 24, 2014 12:15 pm
joomba
Написал простой индикатор
RoundLevels.cpp

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

#include <windows.h>
#include <math.h>
#include "IndicatorInterfaceUnit.h"

int vLineColor = 0x00FFFF;
int vLineStyle = 0;
double dXPoint = 1;
double Div = 0;

EXPORT void __stdcall Init()
{
	IndicatorShortName("RoundLevels");
	SetOutputWindow(ow_ChartWindow);

	RegOption("vLineColor", ot_Color, &vLineColor);
	RegOption("vLineStyle", ot_LineStyle, &vLineStyle);

	if(Digits() == 5 || Digits() == 3) dXPoint = 10;
   
	Div = 0.1 / (Point() * dXPoint);
}

EXPORT void __stdcall OnParamsChange()
{

}

EXPORT void __stdcall Calculate(int index)
{

}
RoundLevels.def

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

LIBRARY ROUNDLEVELS

EXPORTS Init
	Calculate
	ReplaceStr
	IntrfProcsRec
	OnParamsChange
Компилируется без ошибок, но при установке выдает
Изображение

Re: Access Violation при установке индикатора

Добавлено: Вт мар 25, 2014 6:55 am
joomba
Ошибка из-за этих строк кода

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

   if(Digits() == 5 || Digits() == 3) dXPoint = 10;
   
   Div = 0.1 / (Point() * dXPoint);
В индикаторах нельзя записывать в глобальные переменные?

Re: Access Violation при установке индикатора

Добавлено: Вт мар 25, 2014 7:18 am
joomba
Похоже все дело в функциях Digits и Point. Их что нельзя использовать в Init?

Re: Access Violation при установке индикатора

Добавлено: Ср мар 26, 2014 5:38 am
joomba
КАК ИЗВЛЕЧЬ ИЗ ПАРАМЕТРА ot_LineStyle ЗНАЧЕНИЯ TPenStyle, width, TColor???

Re: Access Violation при установке индикатора

Добавлено: Ср мар 26, 2014 11:54 am
neHcioHep
joomba писал(а):КАК ИЗВЛЕЧЬ ИЗ ПАРАМЕТРА ot_LineStyle ЗНАЧЕНИЯ TPenStyle, width, TColor???
В примерах есть индикатор ADR_mod01 написанный на делфи
там делается следующим образом

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

type
  //----------------------------------
  // line style
  //----------------------------------
  PLineStyleRec = ^TLineStyleRec;
  TLineStyleRec = packed record
    LineColor: TColor;
    LineStyle: TPenStyle;
    LineWidth: integer;
  end;
  ...

var
  Line1, Line2: TLineStyleRec;

  ...

//---------------------------------------------------------------------------
// Initialize indicator
//---------------------------------------------------------------------------
procedure Init; stdcall;
begin

  ...

  RegOption('Line1', ot_LineStyle, Line1);
  Line1.LineStyle := TPenStyle(ps_Dot);
  Line1.LineColor := RGB(255, 165, 0);
  Line1.LineWidth := 1;

  RegOption('Line2', ot_LineStyle, Line2);
  Line2.LineStyle := TPenStyle(ps_Solid);
  Line2.LineColor := clRed;
  Line2.LineWidth := 2;
end;
попробуй создать структуру Линия и в RegOption передать указатель на структуру

Re: Access Violation при установке индикатора

Добавлено: Ср мар 26, 2014 12:43 pm
joomba
попробуй создать структуру Линия и в RegOption передать указатель на структуру
Работает, только width не устанавливается

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

#include <windows.h>
#include "IndicatorInterfaceUnit.h"

typedef struct {
	TColor color;
	TPenStyle style;
	int width;
} TLineStyle, *PLineStyle;

TLineStyle vLineStyle;

EXPORT void __stdcall Init()
{
	...
	RegOption("vLineStyle", ot_LineStyle, &vLineStyle);
}

EXPORT void __stdcall Calculate(int index)
{
			...
			ObjectSet(name, OBJPROP_STYLE, vLineStyle.style);
			ObjectSet(name, OBJPROP_COLOR, vLineStyle.color);
			ObjectSet(name, OBJPROP_WIDTH, vLineStyle.width);
			...
}

Re: Access Violation при установке индикатора

Добавлено: Чт мар 27, 2014 12:50 pm
joomba
У меня вопрос к разработчикам!!!
Планируете ли вы встроить в ForexTester какой-нибудь скриптовый язык (типа Lua, Pawn, Pike, AngelScript, Squirrel или даже mql4)??? А то писать dll неудобно, много багов и всё тормозит

Re: Access Violation при установке индикатора

Добавлено: Пт мар 28, 2014 8:20 am
FX Helper
Здравствуйте,

На данный момент в программе Форекс Тестер присутствует поддержка языков Delphi и C++. На данный момент, поддержка других языков не планируется.

Re: Access Violation при установке индикатора

Добавлено: Пт апр 04, 2014 3:19 pm
Terranin
joomba писал(а):Похоже все дело в функциях Digits и Point. Их что нельзя использовать в Init?
Многие функции нельзя использовать в Init, поскольку они не имеют там смысла. Init предназначен только для инициализации параметров и глобальных переменных. Во время вызова Init индикатор еще не привязан к валюте и таймфрейму, поэтому Digits и Point ничего не могут возвратить.

Re: Access Violation при установке индикатора

Добавлено: Пт апр 04, 2014 3:21 pm
Terranin
joomba писал(а):
попробуй создать структуру Линия и в RegOption передать указатель на структуру
Работает, только width не устанавливается

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

#include <windows.h>
#include "IndicatorInterfaceUnit.h"

typedef struct {
	TColor color;
	TPenStyle style;
	int width;
} TLineStyle, *PLineStyle;

TLineStyle vLineStyle;

EXPORT void __stdcall Init()
{
	...
	RegOption("vLineStyle", ot_LineStyle, &vLineStyle);
}

EXPORT void __stdcall Calculate(int index)
{
			...
			ObjectSet(name, OBJPROP_STYLE, vLineStyle.style);
			ObjectSet(name, OBJPROP_COLOR, vLineStyle.color);
			ObjectSet(name, OBJPROP_WIDTH, vLineStyle.width);
			...
}
Ширина работает только если стиль линии ps_solid.