Accès aux barres d'un autre instrument dans un indicateur

Indicateurs d'AlphaTrader
Avatar de l’utilisateur
jpsauvager
Messages : 101
Inscription : sam. oct. 06, 2012 11:56 am
Localisation : Paris
Contact :

Messagepar jpsauvager » sam. mai 24, 2014 2:07 pm

Salut la compagnie,

J'essaye de créer un indicateur de corrélation entre deux instruments. Pour cela j'ai besoin d'appeler les barres d'un second instrument en plus de celui du graphique. J'ai donc mis en paramètre une string qui donne l'instrument avec lequel on vérifie la corrélation. Mais pour le moment je n'arrive pas à avoir les données en faisant GetBarSequence avec une BarConfig qui a pour argument ma string et Tempo.TimeFrame pour que les deux BarConfig soient basées sur le même time frame.

Quelqu'un a une idée ?

Avatar de l’utilisateur
QUASAR
Messages : 285
Inscription : lun. sept. 24, 2012 3:27 am
Contact :

Messagepar QUASAR » dim. mai 25, 2014 10:40 pm

Salut jp,

pour avoir deux instruments il faut faire ce genre d'appel:
BarConfig config;
BarConfig config2;


public override decimal[] OnUpdate()
{
config = new BarConfig("EURUSD", BarType.TimeSpan, TimeSpan.FromMinutes(2));
config2 = new BarConfig("USDJPY", BarType.TimeSpan, TimeSpan.FromMinutes(2));

IBar[] bars1 = GetBarSequence(Period,config);
IBar[] bars2 = GetBarSequence(Period,config2);
decimal[] priceSequence1 = bars1.Prices(BarField.Close);
decimal[] priceSequence2 = bars2.Prices(BarField.Close);
//....//
}

Ensuite tu peux avoir deux output sur lesquels tu peux calculer le correlation..

Avatar de l’utilisateur
jpsauvager
Messages : 101
Inscription : sam. oct. 06, 2012 11:56 am
Localisation : Paris
Contact :

Messagepar jpsauvager » mer. mai 28, 2014 4:56 pm

Moi j'ai voulu faire comme ça, mais apparemment ça ne fonctionne pas. C'est pour être sur que la même BarConfig est utilisée pour les deux instrument et corresponde à celle du graphe qui s'appelle Tempo par défaut dans le code d'un indicateur. Instr correspond au paramètre string de l'indicateur où est indiqué le deuxième instrument.

BarConfig Tempo2 = new BarConfig(Instr, BarType.TimeSpan, Tempo.TimeSpan);

IBar[] bars = GetBarSequence(Period, Tempo);
IBar[] bars2 = GetBarSequence(Period, Tempo2);

Avatar de l’utilisateur
nvitale
Messages : 6614
Inscription : ven. avr. 10, 2009 3:30 pm
Localisation : London
Contact :

Messagepar nvitale » mer. mai 28, 2014 5:27 pm

Benjamin est en conges cette semaine (Siin). Il me semble qu l'on a un exemple d'indics qui le fait mais je ne peux remettre la main dessus.
Sinon je demander a Benjamin de nous ecrire un exemple rapidement.

Avatar de l’utilisateur
QUASAR
Messages : 285
Inscription : lun. sept. 24, 2012 3:27 am
Contact :

Messagepar QUASAR » jeu. mai 29, 2014 8:37 pm

En fait c'est assez problématique oui car un indicateur est définit sur un seul tempo, il y deux solutions que je connais pour y remédier:
-la plus simple tu construit tes bars dans une stratégie, donc tu refais le même bout de code tel que:

BarConfig tempo;

protected override void Initialization()
{
tempo_AUD_JPY = new BarConfig(AUD_JPY, type, m_TimeSpan);
}// et tu ajoutes autant de tempo que tu souhaite et tu auras des barres dans le format m_Timespan ... etc. Tu fais aussi tes calculs dans la strats

-ou alors tu peux passer par currenttick dans un indicateur et par des fonctions :
FF.config = new BarConfig("EURUSD", BarType.Tick, TimeSpan.FromMinutes(1));
decimal d1 = 0m;
d1 = FF.config.Instrument.LastBook ou d1 = FF.config.Instrument.LastTick qui sont des objets IBook et ITick ensuite tu prends les decimals et les assignent. Il faut alors pouvoir construire un histoire "forward" avec une list ou une concurrentlist avec un mode de FirstinFirstOut, tu peux aussi utiliser une taille predéfinie incrémentée de 0 à N et avoir toujours un méme nombre d'element dans ta liste, tu peux aussi utiliser un clef DateTime comme valeur de controle. Ainsi tu peux avoir une collection de N ticks sur lesquel tu peux faire des moyennes et ensuite des calculs de correlation pair par pairs.
Mais le plus simple en restant sur des object barconfig c'est de faire l'execution dans une strat, les méthode à écrire sont dérivée des paramètres SubscribeBars comme ceci:

protected override void Initialization()
{
SubscribeBars(tempo_AUD_JPY, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
//....
}
et avec la méthode :
private void HistoryBarCallback(BarConfig tempo, int acquiredCount, int requestedCount)
{

IBar[] bars = GetBarSequence(0, acquiredCount);
if (bars != null)
{

}

}

Ensuite tu appels tes barres dans protected override void OnBar(IBar bar)
{ //.....} et tu fais tes calculs. Certes tu n'a pas de représentation graphique mais tu peux avoir des Print( " " + variable.ToString()); qui vont te donner les valeurs de correlations, à noter qu'ensuite il faudra implémenter tes exécutions selon les méthode existantes telles que IsBuy() ou IsSell(). TU peux regarder les nombreuses stratégie que j'ai postes et suivre le squellette de base.
++


Avatar de l’utilisateur
QUASAR
Messages : 285
Inscription : lun. sept. 24, 2012 3:27 am
Contact :

Messagepar QUASAR » jeu. mai 29, 2014 9:17 pm

en fait je te file ce code qui à pour but le calcule de correlation entre autres...mais qui n'est pas fini
using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.IO;
using System.Linq;
using System.Collections;
using AlphaUtils;
using AlgoBox.Ind;
using System.ComponentModel;
using AlphaAPI;
using MyAlgos.Ind;
using AlphaAPI.Delegates;

using AlgoBox.Tactics;
namespace MyAlgos.Strat
{

class delta : Strategy
{
private int m_iPeriod = 1000;
[Description("Period")]
public int Period
{
get { return m_iPeriod; }
set { m_iPeriod = value; }
}
//----------------------------------------------------------------------
[Description("Stop Loss")]
public int StopLoss { get { return stopLoss; } set { stopLoss = value; } }
int stopLoss = 100;

[Description("Take Profit")]
public int TakeProfit { get { return takeProfit; } set { takeProfit = value; } }
int takeProfit = 800;

decimal size = 0.1m;
[Description("Size")]
public decimal Size { get { return size; } set { size = value; } }

[Description("Trailing Trigger")]
public int TrailingTrigger { get { return trailingTrigger; } set { trailingTrigger = value; } }
int trailingTrigger = 100;

[Description("Trailing Distance")]
public int TrailingDistance { get { return trailingDistance; } set { trailingDistance = value; } }
int trailingDistance = 70;
//---------------------------------------------------------------------------
BarType type = BarType.TimeSpan;

BarConfig tempo_AUD_JPY; BarConfig tempo_AUD_NZD;
BarConfig tempo_AUD_USD; BarConfig tempo_NZD_JPY;
BarConfig tempo_CHF_JPY; BarConfig tempo_AUD_CHF;
BarConfig tempo_EUR_AUD; BarConfig tempo_AUD_CAD;
BarConfig tempo_EUR_CAD; BarConfig tempo_CAD_CHF;
BarConfig tempo_EUR_CHF; BarConfig tempo_CAD_JPY;
BarConfig tempo_EUR_GBP; BarConfig tempo_NZD_CAD;
BarConfig tempo_EUR_JPY; BarConfig tempo_NZD_CHF;
BarConfig tempo_EUR_USD; BarConfig tempo_UK100;
BarConfig tempo_GBP_AUD; BarConfig tempo_WS30;
BarConfig tempo_GBP_CAD; BarConfig tempo_SPX;
BarConfig tempo_GBP_CHF; BarConfig tempo_GDAXI;
BarConfig tempo_GBP_JPY; BarConfig tempo_FCHI;
BarConfig tempo_GBP_USD; BarConfig tempo_J225;
BarConfig tempo_USD_CAD; BarConfig tempo_XAU_USD;
BarConfig tempo_USD_CHF; BarConfig tempo_XTI_USD;
BarConfig tempo_USD_JPY;
BarConfig tempo_NZD_USD;

TimeSpan m_TimeSpan = TimeSpan.FromMinutes(1);
[Description("TimeSpan")]
public TimeSpan TimeFrame
{
get { return m_TimeSpan; }
set { m_TimeSpan = value; }
}
//--------------------------------------------------------------------------------
// IBook[] Instru;
// ConcurrentDictionary<DateTime, IBook> dateList;
//--------------------------------------------------------------------------------
static string AUD_JPY = "AUDJPY";
static string AUD_USD = "AUDUSD";
static string CHF_JPY = "CHFJPY"; static string GBP_JPY = "GBPJPY"; static string CAD_CHF = "CADCHF"; static string XAU_USD = "XAUUSD";
static string EUR_AUD = "EURAUD"; static string GBP_USD = "GBPUSD"; static string CAD_JPY = "CADJPY"; static string XTI_USD = "XTIUSD";
static string EUR_CAD = "EURCAD"; static string USD_CAD = "USDCAD"; static string NZD_CAD = "NZDCAD";
static string EUR_CHF = "EURCHF"; static string USD_CHF = "USDCHF"; static string NZD_CHF = "NZDCHF";
static string EUR_GBP = "EURGBP"; static string USD_JPY = "USDJPY"; static string UK100 = "UK100";
static string EUR_JPY = "EURJPY"; static string NZD_USD = "NZDUSD"; static string WS30 = "WS30";
static string EUR_USD = "EURUSD"; static string AUD_NZD = "AUDNZD"; static string SPX = "SPX";
static string GBP_AUD = "GBPAUD"; static string NZD_JPY = "NZDJPY"; static string GDAXI = "GDAXI";
static string GBP_CAD = "GBPCAD"; static string AUD_CHF = "AUDCHF"; static string FCHI = "FCHI";
static string GBP_CHF = "GBPCHF"; static string AUD_CAD = "AUDCAD"; static string J225 = "J225";


protected override void Initialization()
{
IsPaused = false;

tempo_AUD_JPY = new BarConfig(AUD_JPY, type, m_TimeSpan); tempo_GBP_CAD = new BarConfig(GBP_CAD, type, m_TimeSpan); tempo_AUD_CHF = new BarConfig(AUD_CHF, type, m_TimeSpan); tempo_FCHI = new BarConfig(FCHI, type, m_TimeSpan);
tempo_AUD_USD = new BarConfig(AUD_USD, type, m_TimeSpan); tempo_GBP_CHF = new BarConfig(GBP_CHF, type, m_TimeSpan); tempo_AUD_CAD = new BarConfig(AUD_CAD, type, m_TimeSpan); tempo_J225 = new BarConfig(J225, type, m_TimeSpan);
tempo_CHF_JPY = new BarConfig(CHF_JPY, type, m_TimeSpan); tempo_GBP_JPY = new BarConfig(GBP_JPY, type, m_TimeSpan); tempo_CAD_CHF = new BarConfig(CAD_CHF, type, m_TimeSpan); tempo_XAU_USD = new BarConfig(XAU_USD, type, m_TimeSpan);
tempo_EUR_AUD = new BarConfig(EUR_AUD, type, m_TimeSpan); tempo_GBP_USD = new BarConfig(GBP_USD, type, m_TimeSpan); tempo_CAD_JPY = new BarConfig(CAD_JPY, type, m_TimeSpan); tempo_XTI_USD = new BarConfig(XTI_USD, type, m_TimeSpan);
tempo_EUR_CAD = new BarConfig(EUR_CAD, type, m_TimeSpan); tempo_USD_CAD = new BarConfig(USD_CAD, type, m_TimeSpan); tempo_NZD_CAD = new BarConfig(NZD_CAD, type, m_TimeSpan);
tempo_EUR_CHF = new BarConfig(EUR_CHF, type, m_TimeSpan); tempo_USD_CHF = new BarConfig(USD_CHF, type, m_TimeSpan); tempo_NZD_CHF = new BarConfig(NZD_CHF, type, m_TimeSpan);
tempo_EUR_GBP = new BarConfig(EUR_GBP, type, m_TimeSpan); tempo_USD_JPY = new BarConfig(USD_JPY, type, m_TimeSpan); tempo_UK100 = new BarConfig(UK100, type, m_TimeSpan);
tempo_EUR_JPY = new BarConfig(EUR_JPY, type, m_TimeSpan); tempo_NZD_USD = new BarConfig(NZD_USD, type, m_TimeSpan); tempo_WS30 = new BarConfig(WS30, type, m_TimeSpan);
tempo_EUR_USD = new BarConfig(EUR_USD, type, m_TimeSpan); tempo_AUD_NZD = new BarConfig(AUD_NZD, type, m_TimeSpan); tempo_SPX = new BarConfig(SPX, type, m_TimeSpan);
tempo_GBP_AUD = new BarConfig(GBP_AUD, type, m_TimeSpan); tempo_NZD_JPY = new BarConfig(NZD_JPY, type, m_TimeSpan); tempo_GDAXI = new BarConfig(GDAXI, type, m_TimeSpan);






SubscribeBars(tempo_AUD_JPY, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_AUD_USD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_CHF_JPY, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_EUR_AUD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_EUR_CAD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_EUR_CHF, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_EUR_GBP, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_EUR_JPY, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_EUR_USD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_GBP_AUD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_GBP_CAD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_GBP_CHF, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_GBP_JPY, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_GBP_USD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_USD_CAD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_USD_CHF, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_USD_JPY, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_NZD_USD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_AUD_NZD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_NZD_JPY, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_AUD_CHF, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_AUD_CAD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_CAD_CHF, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_CAD_JPY, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_NZD_CAD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_NZD_CHF, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_UK100, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_WS30, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_SPX, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_GDAXI, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_FCHI, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_J225, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_XAU_USD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));
SubscribeBars(tempo_XTI_USD, 50, new AlphaAPI.Delegates.SubscribeBarsCallback(HistoryBarCallback));


UseTradeCentricEnvironment();

}
private void HistoryTickCallback(string symbol, int nbAcquired, int nbRequired)
{

ITick[] ticks = GetTickSequence(0, nbAcquired);
if (ticks != null)
{

}

}
private void HistoryBarCallback(BarConfig tempo, int acquiredCount, int requestedCount)
{

IBar[] bars = GetBarSequence(0, acquiredCount);
if (bars != null)
{

}

}

decimal[,] AskPrice = new decimal[5, 34];
decimal[,] _AskSize = new decimal[5, 34];
decimal[,] BidPrice = new decimal[5, 34];
decimal[,] _BidSize = new decimal[5, 34];

protected override void OnBar(IBar bar)
{
ConcurrentDictionary<DateTime, IBook> dateList = new ConcurrentDictionary<DateTime, IBook>();
List<string> _Instru_string = new List<string>();

IBook[] Instru = new IBook[34];

_Instru_string.Add(AUD_JPY);
_Instru_string.Add(AUD_USD);
_Instru_string.Add(CHF_JPY);
_Instru_string.Add(EUR_AUD);
_Instru_string.Add(EUR_CAD);
_Instru_string.Add(EUR_CHF);
_Instru_string.Add(EUR_GBP);
_Instru_string.Add(EUR_JPY);
_Instru_string.Add(EUR_USD);
_Instru_string.Add(GBP_AUD);
_Instru_string.Add(GBP_CAD);
_Instru_string.Add(GBP_CHF);
_Instru_string.Add(GBP_JPY);
_Instru_string.Add(GBP_USD);
_Instru_string.Add(USD_CAD);
_Instru_string.Add(USD_CHF);
_Instru_string.Add(USD_JPY);
_Instru_string.Add(NZD_USD);
_Instru_string.Add(AUD_NZD);
_Instru_string.Add(NZD_JPY);
_Instru_string.Add(AUD_CHF);
_Instru_string.Add(AUD_CAD);
_Instru_string.Add(CAD_CHF);
_Instru_string.Add(CAD_JPY);
_Instru_string.Add(NZD_CAD);
_Instru_string.Add(NZD_CHF);
_Instru_string.Add(UK100);
_Instru_string.Add(WS30);
_Instru_string.Add(SPX);
_Instru_string.Add(GDAXI);
_Instru_string.Add(FCHI);
_Instru_string.Add(J225);
_Instru_string.Add(XAU_USD);
_Instru_string.Add(XTI_USD);


delta dlt = new delta();

for (int i = 0; i < 34; i++)
{
Instru[i] = CurrentBook(_Instru_string.ElementAt(i));
}
int k = 0;

while ( k<34)
{
if( Instru.ElementAt(k) != null)
{

dateList.Add(CurrentBook(_Instru_string.ElementAt(k)).Time, Instru[k]);

k++;
}}
if (dateList.Count == 34)
{
//for (int j = 0; j < Instru[j].ActualDepth; j++)
//{
for (int i = 0; i < 34; i++)
{
AskPrice[0, i] = dateList.Values.ElementAt(i).Ask[0];
_AskSize[0, i] = dateList.Values.ElementAt(i).AskSize[0];
BidPrice[0, i] = dateList.Values.ElementAt(i).Bid[0];
_BidSize[0, i] = dateList.Values.ElementAt(i).BidSize[0];
Print(" AskPrice " + AskPrice[0, i].ToString());
}
//}
}


//Print(Ask[0].ToString() + " " + _AskSize[0].ToString() + " " + Bid[0].ToString() + " " + _BidSize[0].ToString());
//Print("tarima " + dateList.Keys.Last().ToString() + " " + dateList.Count().ToString());
////}
////}




if (TradesTotal() == 0)
{
if (IsBuy())
{
decimal tp = 0;
if (TakeProfit != 0) tp = Ask + takeProfit * Point;
decimal sl = 0;
if (StopLoss != 0) sl = Ask - StopLoss * Point;


ITrade BuyLimit = CreateBuyLimit(Symbol, Size, Ask, tp, sl, " BUY");

Print("Sending Buy Market!");
BuyLimit.Send();

}
else if (IsSell())
{
decimal tp = 0;
if (TakeProfit != 0) tp = Bid - takeProfit * Point;
decimal sl = 0;
if (StopLoss != 0) sl = Bid + StopLoss * Point;

ITrade SellLimit = CreateSellLimit(Symbol, Size, Bid, tp, sl, " SELL");

Print("Sending Sell Market!");
SellLimit.Send();

}


}
}
private bool IsBuy()
{




return false;
}

private bool IsSell()
{

//Print(Ask[0].ToString() + " " + _AskSize[0].ToString() + " " + Bid[0].ToString() + " " + _BidSize[0].ToString());
//Print("tarima " + dateList.Keys.Last().ToString() + " " + dateList.Count().ToString());
////}
//}
{ return false; }
}
}
}

Avatar de l’utilisateur
Trader55
Messages : 1168
Inscription : sam. nov. 03, 2012 3:10 pm
Localisation : Saint Germain en Laye
Contact :

Messagepar Trader55 » jeu. mai 29, 2014 9:39 pm

@Quasar,

question bête... Le code que tu envoie c'est donc du C# à utiliser pour programmer des stratégies sur AlphaTrader ou MultiChart ?

Parfois çà ressemble à du MQL4, c'est toute la partie déclarative à laquelle pour l'instant je ne comprends rien.

Les classes etc...
Image
Image

Avatar de l’utilisateur
QUASAR
Messages : 285
Inscription : lun. sept. 24, 2012 3:27 am
Contact :

Messagepar QUASAR » jeu. mai 29, 2014 9:53 pm

Non non c'est que pour alphatrader. il y a deux choses, le c# window qui est le language de programmation orienté object et l'api dans laquelle ce code s'écrit. Définir le nom et le type des classes, structures,interface, methodes, délégués, et les variable, champs, paramètres et leur interaction, fonctionnement etc.. sont propre à chaque api. Avec MQL4 le code est dérivé du C mais pareil chaque classe, structure, methode, fonction sont propre à la plateforme.


Avatar de l’utilisateur
Trader55
Messages : 1168
Inscription : sam. nov. 03, 2012 3:10 pm
Localisation : Saint Germain en Laye
Contact :

Messagepar Trader55 » jeu. mai 29, 2014 10:12 pm

C'est là que je m'échoue, code Windows API. Etc..., sûr qu'il faudrait que je comprenne l'architecture entre les datas du marché-le broker etc... et qu'est ce que AlphaTrader, un programme soit, mais où se place une API etc... Bref la connexion MT4-broker est simple où semble l'être. Mais avec AlphaTrader, je ne comprends pas.

Par exemple AlphaTrader peut il "pointer" vers un serveur FXCM... ?

Sûr que Nicolas a du écrire une file là dessus... Parceque même si j'apprends le C# , il me manque une explication globale du fonctionnement...
Image
Image

Avatar de l’utilisateur
QUASAR
Messages : 285
Inscription : lun. sept. 24, 2012 3:27 am
Contact :

Messagepar QUASAR » jeu. mai 29, 2014 10:43 pm

bien sur qu'il le peut, pareil FXCM possède son api dans le language de prog qu'il utilise, exemple IBar[] dans alpha doit surement s'écrire comme IBar chez FXCM, en fait c'est hyper simplifié, maintenant faire un connecteur alpha_FXCM ca va passer par le language XML qui connecte chaque assembleur FXCM d'une fonction avec la reciproque chez alpha trader, mais tu peux aussi créer n'importe quel api ou développer cette api depuis fxcm et développer une autre application dans ce language c#.


Revenir vers « Indicateurs »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité