Обращюсь с очередным вопросом: как сделать значение NRTR_WATR кратным 5 в строке "BuyAtStop( bar+1, NRTR_WATR[bar], "nrtr" )"?
[QUOTE]
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
public class MyStrategy : WLRT.LiveTrading.WealthScript
{
//public MyStrategy():base(true, false, "L01-00000F00/15882-SUR")
public MyStrategy():base(true, false, "SPBFUT00W52/SPBFUT00W52Ден.средства")
//Это типа конструктор для определения счета в котором будем торговать.
{}
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 peak = Highest.Series( High, 2 );
DataSeries peaklow = Lowest.Series( Low, 2);
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 );
//PlotSeries( PricePane, NRTR_TRADE, Color.Black, WealthLab.LineStyle.Dotted, 2 );
PlotSeries( PricePane, peak, Color.Green, WealthLab.LineStyle.Solid, 1 );
PlotSeries( PricePane, peaklow, Color.Red, WealthLab.LineStyle.Solid, 1 );
SetShareSize(1);
for(int bar = 20; 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, NRTR_WATR, Close) )
// SellAtMarket( bar+1, LastPosition);
Position p = LastPosition;
//ExitAtStop( bar+1, p, peaklow[bar], "exit" );
ExitAtStop( bar+1, p, NRTR_WATR[bar], "nrtr" );
}
else
{
//code your entry rules here
//if ( CrossOver( bar, Close, NRTR_WATR ) )
// BuyAtMarket( bar+1);
//BuyAtStop( bar+1, peak[bar], "Breakout" );
BuyAtStop( bar+1, NRTR_WATR[bar], "nrtr" );
}
}
}
}
}
[/QUOTE]