Description
using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.Indicators;
using System.Collections.Generic;
namespace cAlgo
{
[Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class JPYXWeighedCurrencyIndex : Indicator
{
[Parameter("USD Weight", DefaultValue = 20.82)]
public double usdWeight { get; set; }
[Parameter("EUR Weight", DefaultValue = 62.33)]
public double eurWeight { get; set; }
[Parameter("GBP Weight", DefaultValue = 9.84)]
public double gbpWeight { get; set; }
[Parameter("AUD Weight", DefaultValue = 1.28)]
public double audWeight { get; set; }
[Parameter("JPY Weight", DefaultValue = 3.99)]
public double jpyWeight { get; set; }
[Parameter("CAD Weight", DefaultValue = 1.71)]
public double cadWeight { get; set; }
[Parameter("Line TimeFrame", DefaultValue = 0)]
public TimeFrame TF { get; set; }
[Parameter("MA Period", DefaultValue = 20)]
public int Period { get; set; }
[Output("Average", LineColor = "White")]
public IndicatorDataSeries Result2 { get; set; }
[Output("CHF Index", LineColor = "Pink")]
public IndicatorDataSeries Result { get; set; }
// eur, gbp, cad, aud, usd, jpy
public Bars Eurchf;
public Bars Gbpchf;
public Bars Cadchf;
public Bars Audchf;
public Bars Usdchf;
public Bars Chfjpy;
public Bars[] eur_Pairs = new Bars[6];
public string[] eur_Symbols = new string[6];
public double[] weights = new double[6];
public double[] f_pairs = new double[6];
public double[] r_pairs = new double[6];
public double[] l_weight = new double[6];
public double f_Audchf, f_Usdchf, f_Cadchf, f_Chfjpy, f_Gbpchf, f_Eurchf;
public double r_Audchf, r_Usdchf, r_Cadchf, r_Chfjpy, r_Gbpchf, r_Eurchf;
private IndicatorDataSeries averagebff;
private IndicatorDataSeries temp;
private MovingAverage average;
protected override void Initialize()
{
// Reference Exhchange Rates from close prices of 02/01/2020
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
temp = CreateDataSeries();
averagebff = CreateDataSeries();
average = Indicators.MovingAverage(averagebff, Period, MovingAverageType.Exponential);
// eur, gbp, cad, aud, usd, jpy
f_Eurchf = 1.08506;
f_Gbpchf = 1.27555;
f_Cadchf = 0.74779;
f_Audchf = 0.6788;
f_Usdchf = 0.97115;
f_Chfjpy = 1 / 111.77;
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
f_pairs[0] = f_Eurchf;
f_pairs[1] = f_Gbpchf;
f_pairs[2] = f_Cadchf;
f_pairs[3] = f_Audchf;
f_pairs[4] = f_Usdchf;
f_pairs[5] = f_Chfjpy;
// eur, gbp, cad, aud, usd, jpy
r_pairs[0] = r_Eurchf;
r_pairs[1] = r_Gbpchf;
r_pairs[2] = r_Cadchf;
r_pairs[3] = r_Audchf;
r_pairs[4] = r_Usdchf;
r_pairs[5] = r_Chfjpy;
eur_Pairs[0] = Eurchf;
eur_Pairs[1] = Gbpchf;
eur_Pairs[2] = Cadchf;
eur_Pairs[3] = Audchf;
eur_Pairs[4] = Usdchf;
eur_Pairs[5] = Chfjpy;
l_weight[0] = eurWeight;
l_weight[1] = gbpWeight;
l_weight[2] = cadWeight;
l_weight[3] = audWeight;
l_weight[4] = usdWeight;
l_weight[5] = cadWeight;
eur_Symbols[0] = "EURCHF";
eur_Symbols[1] = "GBPCHF";
eur_Symbols[2] = "CADCHF";
eur_Symbols[3] = "AUDCHF";
eur_Symbols[4] = "USDCHF";
eur_Symbols[5] = "CHFJPY";
for (int i = 0; i < eur_Pairs.Length; i++)
{
eur_Pairs[i] = MarketData.GetBars(TF, eur_Symbols[i]);
}
}
public override void Calculate(int index)
{
// Setting the reference quote
//var index2 = GetIndexByTF(BarSeries[i], this.Bars, index);
double sum = 0;
for (int i = 0; i < eur_Pairs.Length; i++)
{
var index2 = GetIndexByTF(eur_Pairs[i], this.Bars, index);
if (i < 4)
{
r_pairs[i] = ((1 / eur_Pairs[i].ClosePrices[index2]) / f_pairs[i]) * l_weight[i];
sum += r_pairs[i];
}
else
{
r_pairs[i] = (eur_Pairs[i].ClosePrices[index2] / f_pairs[i]) * l_weight[i];
sum += r_pairs[i];
}
}
averagebff[index] = sum;
Result[index] = sum;
if (double.IsNaN(average.Result[index]) == false)
{
Result2[index] = average.Result[index];
}
}
int GetIndexByTF(Bars B1, Bars B2, int index)
{
var index2 = B1.OpenTimes.GetIndexByTime(B2.OpenTimes[index]);
return index2;
}
}
}
AN
andurei
Joined on 30.09.2020
- Distribution: Free
- Language: C#
- Trading platform: cTrader Automate
- File name: CHF Currency Index.algo
- Rating: 0
- Installs: 1222
- Modified: 13/10/2021 09:55
Note that publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section, please use the Copyright Infringement Notification form to submit a claim.
Comments
Log in to add a comment.
No comments found.