1.
Где скачать описание функций (QuikRef) WealthScript на русском языке?
2.
Помогите разобраться, почему код компилится, но не выполняется (run the strategy)?
[CODE]using System;
using System.Collections.Generic;
//using System.Linq;
using System.Drawing;
using System.Text;
using WealthLab;
using WealthLab.Indicators;
using WealthLab.Optimizers;
using WealthLab.Strategies;
namespace WealthLab.Strategies
{
public class NRTR_ATR : WealthScript
{
protected override void Execute()
{
SetLogScale( PricePane, false );
int TR_Period = 20; // период WMA для True Range
int Dynamic_Channel_Period = 0; // длина динамического канала
int Max_Channel_Period = 20; // верхнее ограничение на длину динамического канала
int Trend = 0; // переменная для идентификации направления движения цены
double Reverse = 0; // NRTR_WATR
double HPrice=0; // максимальная цена за период
double LPrice=0; // минимальная цена за период
double Multiple = 2.0; // множитель для WATR
DataSeries slowma = SMA.Series(Close, 8);
DataSeries fastma = SMA.Series(Close, 3);
DataSeries K = WMA.Series( TrueRange.Series( Bars ), TR_Period ) * Multiple;
DataSeries NRTR_WATR = new DataSeries( Bars, "NRTR_WATR" );
PlotSeries( PricePane, NRTR_WATR, Color.Blue, WealthLab.LineStyle.Dotted, 2 );
for(int bar = K.FirstValidValue; bar < Bars.Count; bar++)
{
if( Trend >= 0 ) // восходящий тренд
{
if (Max_Channel_Period > Dynamic_Channel_Period)
{
Dynamic_Channel_Period++; // увеличиваем период канала
HPrice = Math.Max( Bars.Close[bar], Highest.Value(bar, Close, Dynamic_Channel_Period));
}
else HPrice = Math.Max( Bars.Close[bar], Highest.Value(bar, Close, Max_Channel_Period));
Reverse = HPrice - K[bar]; // индикатор для восходящего тренда
if( Bars.Close[bar] <= Reverse ) // переворот индикатора
{
Dynamic_Channel_Period = 0; // обнуляем период канала
Trend = -1; // меняем ориентацию тренда
LPrice = Bars.Close[bar];
Reverse = LPrice + K[bar];
}
}
if( Trend <= 0 ) // нисходящий тренд
{
if (Max_Channel_Period > Dynamic_Channel_Period)
{
Dynamic_Channel_Period++; // увеличиваем период канала
LPrice = Math.Min( Bars.Close[bar], Lowest.Value(bar, Close, Dynamic_Channel_Period));
}
else LPrice = Math.Min( Bars.Close[bar], Lowest.Value(bar, Close, Max_Channel_Period));
Reverse = LPrice + K[bar]; // индикатор для восходящего тренда
if( Bars.Close[bar] >= Reverse ) // переворот индикатора
{
Dynamic_Channel_Period = 0; // обнуляем период канала
Trend = 1; // меняем ориентацию тренда
HPrice = Bars.Close[bar];
Reverse = HPrice - K[bar];
}
}
NRTR_WATR[bar] = Reverse;
if (IsLastPositionActive)
{
//code your exit rules here
if ( CrossOver( bar, Close, NRTR_WATR ) )
SellAtMarket( bar+1, LastPosition);
}
else
{
//code your entry rules here
if ( CrossOver( bar, NRTR_WATR, Close) )
BuyAtMarket( bar+1);
}
}
}
}
}[/CODE]