Salut Falex, merci pour ta lanterne
Falex a écrit :
Dans l'ordre :
Non
Non sauf sur les screen et ou indice ou backtest mince je ne sais plus
Non
C'est une applet Java. Tu la lance par un jnlp sur tu récupères par le web (avec jeton et tout le toutim)
Dans l'ordre:
- Sic!
- Oui j'ai vu pour les backtest, l’intérêt de connaitre le spread pour le robot et de connaitre sa position sur un trade en cours, je pourrai toujours faire une pirouette en utilisant un fonction profit que j'ai cru voir en lisant les manuels.
- Sic!!! c'était trop beau...
Falex a écrit :
Zigzag est repeind donc inutilisable en live... As usual
Oui, huhu ^^
j'ai trouvé une parade à ce problème, coupler l'indicateur avec un indicateur de trend, lorsque le trend change tu utilises les infos passées, ça fonctionne bien (enfin sur MT4)... Un peu de code valant mieux que de longs discours et puisque c'est bientôt noël, ci-dessous un indic perso:
Code : #
//+------------------------------------------------------------------+
//| ZigZag_HiLoSMA.mq4 |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Black
#property indicator_color3 Red
#property indicator_width3 2
//---- input parameters
extern int MT4period = 0;
extern datetime StartTime;
extern int HILOperiod = 10;
extern int SMAperiod = 1;
//---- buffers
double HiLo[];
double SMA[];
double ZigZag[];
double TrendWay[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- nb buffers
IndicatorBuffers(4);
//---- indicator lines
SetIndexStyle(0, DRAW_LINE, 0, 1);
SetIndexStyle(1, DRAW_LINE, 0, 1);
SetIndexStyle(2, DRAW_SECTION, 0);
SetIndexStyle(3, DRAW_NONE);
SetIndexBuffer(0, HiLo);
SetIndexBuffer(1, SMA);
SetIndexBuffer(2, ZigZag);
SetIndexBuffer(3, TrendWay);
//---- names for DataWindow label
SetIndexLabel(0, "HiLo");
SetIndexLabel(1, "SMA");
SetIndexLabel(2, "ZigZag");
SetIndexLabel(3, "TrendWay");
//---- nb digits
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//---- indicator short name
IndicatorShortName("ZigZag HiLoSMA");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator start function |
//+------------------------------------------------------------------+
int start()
{
//---- intern values declarations
bool Pr = false, PrevPr = false;
double iMAHi, iMALo, val;
int i, j, k, limit;
int LastDetect, CurDetect, CurTrend, NextTrend;
int counted_bars=IndicatorCounted();
int BarsPeriod=iBars(NULL,MT4period);
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=BarsPeriod-counted_bars;
//---- create HiLo and SMA lines
for(i=limit; i>=0; i--) //---- past to present (no repaint needed)
{
//---- extract HiLo and SMA lines
iMAHi = iMA(NULL, MT4period, HILOperiod, 1, MODE_SMA, PRICE_HIGH, i);
iMALo = iMA(NULL, MT4period, HILOperiod, 1, MODE_SMA, PRICE_LOW, i);
SMA[i] = iMA(NULL, MT4period, SMAperiod, 1, MODE_SMA, PRICE_CLOSE, i);
//---- check result with last value
if(Close[i] < iMALo && PrevPr == true) Pr = false;
if(Close[i] > iMAHi && PrevPr == false) Pr = true;
PrevPr = Pr;
//---- final cutting
if(Pr == false) HiLo[i] = iMAHi;
if(Pr == true) HiLo[i] = iMALo;
if(HiLo[i] < SMA[i]) TrendWay[i] = 1;
if(HiLo[i] > SMA[i]) TrendWay[i] = -1;
}
//---- create or repaint ZigZag with HiLo and SMA lines (repaint for current trend because end not yet)
NextTrend = 0;
for(i=0; i<=BarsPeriod; i++) //---- present to past (repaint needed)
{
//---- reset ZigZag value
ZigZag[i-1] = EMPTY_VALUE;
//---- save trend detection (1 bullish, -1 bearish)
if(HiLo[i] < SMA[i]) CurDetect = 1;
else if(HiLo[i] > SMA[i]) CurDetect = -1;
//---- if different trend, extract High or Low
if(CurDetect != LastDetect)
{
CurTrend = i-1;
//---- bullish trend
if(LastDetect == 1)
{
for(j=CurTrend; j>=NextTrend; j--)
{
if((val == EMPTY_VALUE) || (iHigh(NULL, MT4period, j) > val))
{
val = iHigh(NULL, MT4period, j);
k = j;
}
}
ZigZag[k] = val;
}
//---- bearish trend
else if(LastDetect == -1)
{
for(j=CurTrend; j>=NextTrend; j--)
{
if((val == EMPTY_VALUE) || (iLow(NULL, MT4period, j) < val))
{
val = iLow(NULL, MT4period, j);
k = j;
}
}
ZigZag[k] = val;
}
//---- reset values for next trend
NextTrend = CurTrend+1;
CurTrend = EMPTY_VALUE;
val = EMPTY_VALUE;
k = EMPTY_VALUE;
}
LastDetect = CurDetect;
}
return(0);
}
//+------------------------------------------------------------------+
j'utilisais ce code en filtrage sur UT supérieure, notamment avec une strat basée sur la théorie de Dow... Ce n'est pas ma priorité mais si quelqu'un bascule ce code sous PRT, je suis preneur...
Falex a écrit :
Il n'existe pas sous leur forme classique par contre toute variable est un Ar et tu peux appeler son état de la nième boygie avant en faisant [n]
Non, je recherche la possibilité de faire des tableaux multi-dimensionnels de façon à optimiser le code pour ne pas tout recalculer à chaque tick... L'argument temporel passé en variable "X bougies" ne correspond pas à ma recherche... Dans le doute, je vais quand même poser la question sur le support de PRT car les tableaux sont pour moi indispensables, je n'aime pas créer des usines à gaz...
++, koub.