Создание двухполюсного осциллятора в cTrader для использования на моих графикахC#

Место общения программистов C#
Ответить
Anonymous
 Создание двухполюсного осциллятора в cTrader для использования на моих графиках

Сообщение Anonymous »

Я пытаюсь перевести код pine-script в двухполюсный осциллятор торгового представления BigBeluga для использования на своих графиках cTrader. Код Trading View находится здесь:
https://www.tradingview.com/script/2Ssn ... BigBeluga/
Я создал следующий код в cTrader с помощью Visual Studio, но результаты на графиках, которые я сравнивал, не совпадают (представление торговли с индикатором и представление cTrader с моей переведенной версией индикатор), и я не могу понять, где/что я делаю не так с моим кодом C# для cTrader.
Например, на всех телевизионных графиках, которые я смотрел, кривые красивые и плавные; по сравнению с cTrader, линии осциллятора в половине случаев выглядят неровными и более заостренными, чем гладкая кривая.
Поэтому я надеюсь, что кто-нибудь сможет указать на какие-либо проблемы или что-то, что могло быть «потеряно при переводе» при моей попытке преобразовать сценарий pine в структуру индикаторов C# cTrader.
Я даю ему разрешения «полного доступа», чтобы я мог попробовать отладку в VS, чтобы увидеть, даст ли это мне что-нибудь подсказки о том, где могут быть проблемы.
Вот мой код C# cTrader:
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Indicators
{
[Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
public class TwoPoleOscillator : Indicator
{
[Parameter("Filter Length", DefaultValue = 20, MinValue = 1)]
public int length { get; set; }

// === OUTPUTS ===
[Output("two_p", LineColor = "#55ffda", Thickness = 1)]
public IndicatorDataSeries two_p { get; set; }

[Output("two_pp")]
public IndicatorDataSeries two_pp { get; set; }

[Output("buy", PlotType = PlotType.Points, LineColor = "#55ffda", Thickness = 3)]
public IndicatorDataSeries buy_plot { get; set; }

[Output("sell", PlotType = PlotType.Points, LineColor = "#8c5bff", Thickness = 3)]
public IndicatorDataSeries sell_plot { get; set; }

// === SERIES ===
private IndicatorDataSeries sma_n1;
private IndicatorDataSeries sma_closeMinusSma1;
private IndicatorDataSeries smooth1;
private IndicatorDataSeries smooth2;

private SimpleMovingAverage sma1;
private SimpleMovingAverage sma_norm;
private StandardDeviation stdev_norm;

protected override void Initialize()
{
#if DEBUG
var result = System.Diagnostics.Debugger.Launch();
#endif
sma_n1 = CreateDataSeries();
sma_closeMinusSma1 = CreateDataSeries();
smooth1 = CreateDataSeries();
smooth2 = CreateDataSeries();

sma1 = Indicators.SimpleMovingAverage(Bars.ClosePrices, 25);
sma_norm = Indicators.SimpleMovingAverage(sma_closeMinusSma1, 25);
stdev_norm = Indicators.StandardDeviation(sma_closeMinusSma1, 25, MovingAverageType.Simple);
}

public override void Calculate(int index)
{
//if (index < 30)
// return;

// === CALCULATIONS ===
sma_closeMinusSma1[index] = (Bars.ClosePrices[index] - sma1.Result[index]);

sma_n1[index] = ((Bars.ClosePrices[index] - sma1.Result[index]) - (sma_norm.Result[index])) / stdev_norm.Result[index];

// === TWO-POLE FILTER ===
double alpha = 2.0 / (length + 1);

if (double.IsNaN(smooth1[index - 1]))
smooth1[index] = sma_n1[index];
else
smooth1[index] = (1 - alpha) * smooth1[index] + alpha * sma_n1[index];

if (double.IsNaN(smooth2[index - 1]))
smooth2[index] = sma_n1[index];
else
smooth2[index] = (1 - alpha) * smooth2[index] + alpha * smooth1[index];

two_p[index] = smooth2[index];
two_pp[index] = index >= 4 ? two_p[index - 4] : double.NaN;

// === SIGNALS ===
bool buy =
index > 4 &&
two_p[index - 1] < two_pp[index - 1] &&
two_p[index] > two_pp[index] &&
two_p[index] < 0;

bool sell =
index > 4 &&
two_p[index - 1] > two_pp[index - 1] &&
two_p[index] < two_pp[index] &&
two_p[index] > 0;

buy_plot[index] = buy ? two_p[index] : double.NaN;
sell_plot[index] = sell ? two_p[index] : double.NaN;
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... -my-charts
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»