Образцы, куски исходников, вопросы. Обсуждаем программирование.
-
joomba
- Сообщения: 12
- Зарегистрирован: Пт мар 21, 2014 12:35 pm
#1
Сообщение
joomba » Пн мар 24, 2014 12:15 pm
Написал простой индикатор
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
Компилируется без ошибок, но при установке выдает
-
joomba
- Сообщения: 12
- Зарегистрирован: Пт мар 21, 2014 12:35 pm
#2
Сообщение
joomba » Вт мар 25, 2014 6:55 am
Ошибка из-за этих строк кода
Код: Выделить всё
if(Digits() == 5 || Digits() == 3) dXPoint = 10;
Div = 0.1 / (Point() * dXPoint);
В индикаторах нельзя записывать в глобальные переменные?
-
joomba
- Сообщения: 12
- Зарегистрирован: Пт мар 21, 2014 12:35 pm
#3
Сообщение
joomba » Вт мар 25, 2014 7:18 am
Похоже все дело в функциях Digits и Point. Их что нельзя использовать в Init?
-
joomba
- Сообщения: 12
- Зарегистрирован: Пт мар 21, 2014 12:35 pm
#4
Сообщение
joomba » Ср мар 26, 2014 5:38 am
КАК ИЗВЛЕЧЬ ИЗ ПАРАМЕТРА ot_LineStyle ЗНАЧЕНИЯ TPenStyle, width, TColor???
-
neHcioHep
- Сообщения: 4
- Зарегистрирован: Пт ноя 20, 2009 9:24 pm
-
Контактная информация:
#5
Сообщение
neHcioHep » Ср мар 26, 2014 11:54 am
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 передать
указатель на структуру
-
joomba
- Сообщения: 12
- Зарегистрирован: Пт мар 21, 2014 12:35 pm
#6
Сообщение
joomba » Ср мар 26, 2014 12:43 pm
попробуй создать структуру Линия и в 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);
...
}
-
joomba
- Сообщения: 12
- Зарегистрирован: Пт мар 21, 2014 12:35 pm
#7
Сообщение
joomba » Чт мар 27, 2014 12:50 pm
У меня вопрос к разработчикам!!!
Планируете ли вы встроить в ForexTester какой-нибудь скриптовый язык (типа Lua, Pawn, Pike, AngelScript, Squirrel или даже mql4)??? А то писать dll неудобно, много багов и всё тормозит
-
FX Helper
- Сообщения: 567
- Зарегистрирован: Пн апр 01, 2013 11:44 am
#8
Сообщение
FX Helper » Пт мар 28, 2014 8:20 am
Здравствуйте,
На данный момент в программе Форекс Тестер присутствует поддержка языков Delphi и C++. На данный момент, поддержка других языков не планируется.
-
Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
#9
Сообщение
Terranin » Пт апр 04, 2014 3:19 pm
joomba писал(а):Похоже все дело в функциях Digits и Point. Их что нельзя использовать в Init?
Многие функции нельзя использовать в Init, поскольку они не имеют там смысла. Init предназначен только для инициализации параметров и глобальных переменных. Во время вызова Init индикатор еще не привязан к валюте и таймфрейму, поэтому Digits и Point ничего не могут возвратить.
Asta la vista
Mike
-
Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
#10
Сообщение
Terranin » Пт апр 04, 2014 3:21 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);
...
}
Ширина работает только если стиль линии ps_solid.
Asta la vista
Mike