Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
parametri predefiniti, 3.0 e 10
parametri predefiniti, 3.0 e 10
In questo caso basta sostituire la seguente linea :
with this
[PHP]ExtMapBuffer1 = iCustom(Symbol2,0,"Supertrend",3,10,0,iShift2);Presumo che il nome dell'indicatore sia "Supertrend"
Non voglio sostituire, voglio integrare il codice supertrend in questo indicatore, e il supertrend integrato è calcolato sull'indicatore ExtMapBuffer1...
Non voglio sostituire, voglio integrare il codice supertrend in questo indicatore, e il supertrend integrato è calcolato sull'indicatore ExtMapBuffer1...
k3rn3l
Temo di non capire cosa significa "integrare".
Vorresti spiegarmi meglio?
Intendo qualcosa del genere:
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 DodgerBlue
#property indicator_color2 Lime
#property indicator_color3 Red
double TrendUp[], TrendDown[], ExtMapBuffer1[];
int changeOfTrend;
extern int Nbr_Periods = 10;
extern double Multiplier = 3.0;
extern double Beta1 = 1.0;
extern string Symbol2 = "GER30";
extern double Beta2 = 1.0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexBuffer(1, TrendUp);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(2, TrendDown);
SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2);
IndicatorShortName(Symbol() + " " + Beta1 + " " + Symbol2 + " " + Beta2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, flag, flagh, trend[5000];
double up[5000], dn[5000], medianPrice, atr;
int counted_bars = IndicatorCounted();
//---- check for possible errors
if(counted_bars < 0) return(-1);
//---- last counted bar will be recounted
if(counted_bars > 0) counted_bars--;
limit=Bars-counted_bars;
//Print(limit);
//----
if(Bars<1) return(0);
int j = Bars-counted_bars -1;
while(j >=0) {
int iShift2 = iBarShift(Symbol2, 0, Time[j], false);
ExtMapBuffer1[j] = Close[j] * Beta1 - iClose(Symbol2, NULL, iShift2) * Beta2;
for (i = Bars; i >= 0; i--) {
TrendUp = EMPTY_VALUE;
TrendDown = EMPTY_VALUE;
atr = iATR(NULL, 0, Nbr_Periods, i);
//Print("atr: "+atr);
medianPrice = ExtMapBuffer1[j]/2;
//Print("medianPrice: "+medianPrice);
up=medianPrice+(Multiplier*atr);
//Print("up: "+up);
dn=medianPrice-(Multiplier*atr);
//Print("dn: "+dn);
trend=1;
if (Close>up) {
trend=1;
if (trend == -1) changeOfTrend = 1;
//Print("trend: "+trend);
}
else if (Close<dn) {
trend=-1;
if (trend == 1) changeOfTrend = 1;
//Print("trend: "+trend);
}
else if (trend==1) {
trend=1;
changeOfTrend = 0;
}
else if (trend==-1) {
trend=-1;
changeOfTrend = 0;
}
if (trend0) {
flag=1;
//Print("flag: "+flag);
}
else {
flag=0;
//Print("flagh: "+flag);
}
if (trend>0 && trend<0) {
flagh=1;
//Print("flagh: "+flagh);
}
else {
flagh=0;
//Print("flagh: "+flagh);
}
if (trend>0 && dn<dn)
dn=dn;
if (trendup)
up=up;
if (flag==1)
up=medianPrice+(Multiplier*atr);
if (flagh==1)
dn=medianPrice-(Multiplier*atr);
//-- Draw the indicator
if (trend==1) {
TrendUp=dn;
if (changeOfTrend == 1) {
TrendUp = TrendDown;
changeOfTrend = 0;
}
}
else if (trend==-1) {
TrendDown=up;
if (changeOfTrend == 1) {
TrendDown = TrendUp;
changeOfTrend = 0;
}
}
}
WindowRedraw();
}
//----
return(0);
}
//+------------------------------------------------------------------+
Intendo qualcosa come questo:
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 DodgerBlue
#property indicator_color2 Lime
#property indicator_color3 Red
double TrendUp[], TrendDown[], ExtMapBuffer1[];
int changeOfTrend;
extern int Nbr_Periods = 10;
extern double Multiplier = 3.0;
extern double Beta1 = 1.0;
extern string Symbol2 = "GER30";
extern double Beta2 = 1.0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexBuffer(1, TrendUp);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(2, TrendDown);
SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2);
IndicatorShortName(Symbol() + " " + Beta1 + " " + Symbol2 + " " + Beta2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, flag, flagh, trend[5000];
double up[5000], dn[5000], medianPrice, atr;
int counted_bars = IndicatorCounted();
//---- check for possible errors
if(counted_bars < 0) return(-1);
//---- last counted bar will be recounted
if(counted_bars > 0) counted_bars--;
limit=Bars-counted_bars;
//Print(limit);
//----
if(Bars<1) return(0);
int j = Bars-counted_bars -1;
while(j >=0) {
int iShift2 = iBarShift(Symbol2, 0, Time[j], false);
ExtMapBuffer1[j] = Close[j] * Beta1 - iClose(Symbol2, NULL, iShift2) * Beta2;
for (i = Bars; i >= 0; i--) {
TrendUp = EMPTY_VALUE;
TrendDown = EMPTY_VALUE;
atr = iATR(NULL, 0, Nbr_Periods, i);
//Print("atr: "+atr);
medianPrice = ExtMapBuffer1[j]/2;
//Print("medianPrice: "+medianPrice);
up=medianPrice+(Multiplier*atr);
//Print("up: "+up);
dn=medianPrice-(Multiplier*atr);
//Print("dn: "+dn);
trend=1;
if (Close>up) {
trend=1;
if (trend == -1) changeOfTrend = 1;
//Print("trend: "+trend);
}
else if (Close<dn) {
trend=-1;
if (trend == 1) changeOfTrend = 1;
//Print("trend: "+trend);
}
else if (trend==1) {
trend=1;
changeOfTrend = 0;
}
else if (trend==-1) {
trend=-1;
changeOfTrend = 0;
}
if (trend0) {
flag=1;
//Print("flag: "+flag);
}
else {
flag=0;
//Print("flagh: "+flag);
}
if (trend>0 && trend<0) {
flagh=1;
//Print("flagh: "+flagh);
}
else {
flagh=0;
//Print("flagh: "+flagh);
}
if (trend>0 && dn<dn)
dn=dn;
if (trendup)
up=up;
if (flag==1)
up=medianPrice+(Multiplier*atr);
if (flagh==1)
dn=medianPrice-(Multiplier*atr);
//-- Draw the indicator
if (trend==1) {
TrendUp=dn;
if (changeOfTrend == 1) {
TrendUp = TrendDown;
changeOfTrend = 0;
}
}
else if (trend==-1) {
TrendDown=up;
if (changeOfTrend == 1) {
TrendDown = TrendUp;
changeOfTrend = 0;
}
}
}
WindowRedraw();
}
//----
return(0);
}
//+------------------------------------------------------------------+
Poi dichiarate un altro buffer (per esempio ExtMapBuffer2) e usate iCustom() per recuperare i valori del supertrend in quel nuovo buffer (qualcosa come questo :
ExtMapBuffer2[i] =iCustom(Symbol2,0,"Supertrend",3,10,0,iShift2);
Grazie Ora, ho questo... Potete aiutarmi a correggere gli errori?
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 FireBrick
#property indicator_color3 Green
#property indicator_color4 Blue
#property indicator_width1 1
#property indicator_width2 2
#property indicator_width3 2
#property indicator_style1 STYLE_DOT
// Indicator parameters
extern int SuperTrend.Period=10;
extern double SuperTrend.Multiplier=3.0;
extern string Symbol2 = "GBPUSD";
// Global module varables
double gadUpBuf[];
double gadDnBuf[];
double gadSuperTrend[];
double Spread[];
//-----------------------------------------------------------------------------
// function: init()
// Description: Custom indicator initialization function.
//-----------------------------------------------------------------------------
int init() {
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, Spread);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, gadSuperTrend);
SetIndexLabel(1, "SuperTrend");
SetIndexStyle(2, DRAW_LINE);
SetIndexBuffer(2, gadDnBuf);
SetIndexLabel(2, "SuperTrend Down");
SetIndexStyle(3, DRAW_LINE);
SetIndexBuffer(3, gadUpBuf);
SetIndexLabel(3, "SuperTrend Up");
IndicatorShortName(INDICATOR_NAME+"["+SuperTrend.Period+";"+DoubleToStr(SuperTrend.Multiplier,1)+"]");
return(0);
}
//-----------------------------------------------------------------------------
// function: deinit()
// Description: Custom indicator deinitialization function.
//-----------------------------------------------------------------------------
int deinit() {
return (0);
}
///-----------------------------------------------------------------------------
// function: start()
// Description: Custom indicator iteration function.
//-----------------------------------------------------------------------------
int start() {
int iNewBars, iCountedBars, i;
double dAtr,dUpperLevel, dLowerLevel;
// Get unprocessed ticks
iCountedBars=IndicatorCounted();
if(iCountedBars < 0) return (-1);
if(iCountedBars>0) iCountedBars--;
iNewBars=Bars-iCountedBars;
Spread = Close / iClose(Symbol2, NULL, i) ;
for(i=iNewBars; i>=0; i--) {
// Calc SuperTrend
dAtr = iATR(NULL, 0, SuperTrend.Period, i);
dUpperLevel=Spread/2+SuperTrend.Multiplier*dAtr;
dLowerLevel=Spread/2-SuperTrend.Multiplier*dAtr;
// Set supertrend levels
if (Close>gadSuperTrend && Close<=gadSuperTrend) {
gadSuperTrend=dLowerLevel;
}
else if (Close=gadSuperTrend) {
gadSuperTrend=dUpperLevel;
}
else if (gadSuperTrend<dLowerLevel)
gadSuperTrend=dLowerLevel;
else if (gadSuperTrend>dUpperLevel)
gadSuperTrend=dUpperLevel;
else
gadSuperTrend=gadSuperTrend;
// Draw SuperTrend lines
gadUpBuf=EMPTY_VALUE;
gadDnBuf=EMPTY_VALUE;
if (Close>gadSuperTrend || (Close==gadSuperTrend && Close>gadSuperTrend))
gadUpBuf=gadSuperTrend;
else if (Close<gadSuperTrend || (Close==gadSuperTrend && Close<gadSuperTrend))
gadDnBuf=gadSuperTrend;
}
return(0);
}
//+------------------------------------------------------------------+
Grazie Ora, ho questo... Potete aiutarmi a correggere gli errori?
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 FireBrick
#property indicator_color3 Green
#property indicator_color4 Blue
#property indicator_width1 1
#property indicator_width2 2
#property indicator_width3 2
#property indicator_style1 STYLE_DOT
// Indicator parameters
extern int SuperTrend.Period=10;
extern double SuperTrend.Multiplier=3.0;
extern string Symbol2 = "GBPUSD";
// Global module varables
double gadUpBuf[];
double gadDnBuf[];
double gadSuperTrend[];
double Spread[];
//-----------------------------------------------------------------------------
// function: init()
// Description: Custom indicator initialization function.
//-----------------------------------------------------------------------------
int init() {
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, Spread);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, gadSuperTrend);
SetIndexLabel(1, "SuperTrend");
SetIndexStyle(2, DRAW_LINE);
SetIndexBuffer(2, gadDnBuf);
SetIndexLabel(2, "SuperTrend Down");
SetIndexStyle(3, DRAW_LINE);
SetIndexBuffer(3, gadUpBuf);
SetIndexLabel(3, "SuperTrend Up");
IndicatorShortName(INDICATOR_NAME+"["+SuperTrend.Period+";"+DoubleToStr(SuperTrend.Multiplier,1)+"]");
return(0);
}
//-----------------------------------------------------------------------------
// function: deinit()
// Description: Custom indicator deinitialization function.
//-----------------------------------------------------------------------------
int deinit() {
return (0);
}
///-----------------------------------------------------------------------------
// function: start()
// Description: Custom indicator iteration function.
//-----------------------------------------------------------------------------
int start() {
int iNewBars, iCountedBars, i;
double dAtr,dUpperLevel, dLowerLevel;
// Get unprocessed ticks
iCountedBars=IndicatorCounted();
if(iCountedBars < 0) return (-1);
if(iCountedBars>0) iCountedBars--;
iNewBars=Bars-iCountedBars;
Spread = Close / iClose(Symbol2, NULL, i) ;
for(i=iNewBars; i>=0; i--) {
// Calc SuperTrend
dAtr = iATR(NULL, 0, SuperTrend.Period, i);
dUpperLevel=Spread/2+SuperTrend.Multiplier*dAtr;
dLowerLevel=Spread/2-SuperTrend.Multiplier*dAtr;
// Set supertrend levels
if (Close>gadSuperTrend && Close<=gadSuperTrend) {
gadSuperTrend=dLowerLevel;
}
else if (Close=gadSuperTrend) {
gadSuperTrend=dUpperLevel;
}
else if (gadSuperTrend<dLowerLevel)
gadSuperTrend=dLowerLevel;
else if (gadSuperTrend>dUpperLevel)
gadSuperTrend=dUpperLevel;
else
gadSuperTrend=gadSuperTrend;
// Draw SuperTrend lines
gadUpBuf=EMPTY_VALUE;
gadDnBuf=EMPTY_VALUE;
if (Close>gadSuperTrend || (Close==gadSuperTrend && Close>gadSuperTrend))
gadUpBuf=gadSuperTrend;
else if (Close<gadSuperTrend || (Close==gadSuperTrend && Close<gadSuperTrend))
gadDnBuf=gadSuperTrend;
}
return(0);
}
//+------------------------------------------------------------------+
Scusa, ma non riesco proprio a capire cosa stai cercando di fare (sembra che tu stia cercando di calcolare il super trend di un qualche tipo di spread ma non riesco a capirlo dal codice)
Perché non parti dall'indicatore super trend stesso (visto che sembra che tu stia cercando di cambiarlo)?
Sì, è quello che cerco di fare:
1) creare un indicatore dello spread tra 2 asset
2) calcolare il Supertrend sullo spread
Non posso utilizzare il Supertrend con iCustom perché viene caricato sul grafico principale e non sullo spread creato da me.
Allora, ho provato a seguire questa strada (implementare tutto il codice dello spread e del supertrend in un indicatore)
Sì, è quello che cerco di fare:
1) creare un indicatore dello spread tra 2 asset
2) calcolare il Supertrend sullo spread
Non posso usare il Supertrend con iCustom perché viene caricato sul grafico principale e non sullo spread creato da me.
Allora, ho provato a seguire questa strada (implementare tutto il codice dello spread e del supertrend in un solo indicatore)k3rn3l
Non puoi farlo (poiché il supertrend dipende da cose come l'atr - dovresti calcolare anche l'atr di quello spread e questo non è possibile). Inoltre stai confrontando l'attuale prezzo di chiusura con quel valore di spread che non è logico. Questo è il risultato con quell'atr usato, ma come ho detto, non ha un significato come nel super trend originale, e non puoi confrontare valori da una scala di valori completamente diversa (vicino rispetto allo spread, per esempio)