Страница 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.