Ich versuche, den Indikator Puffer vom anderen Ende (ArraySetAsSeries (..., false)) zu füllen, alles funktioniert gut für eine Weile, aber dann passiert etwas mit dem Puffer und der allerletzte Array-Index wird gefüllt, obwohl es nicht sein sollte. Ich vermute, dass das Terminal den Puffer irgendwann abschneidet und das Gewicht des Puffers sogar mit dem letzten Array-Index gefüllt ist. Vielleicht sollte der Array-Puffer irgendwann freigegeben werden, aber wann? Können Sie das Testbeispiel korrigieren?
Können Sie mir bitte sagen, warum dieser Indikator nur selten Pfeile in der Historie zeichnet, aber wenn Sie mit dem Handel beginnen, beginnt er häufig zu zeichnen.
Dann, wenn Sie MT4 schließen und öffnen Sie es wieder, dann an der gleichen Stelle, wo in Echtzeit der Indikator wie ein Maschinengewehr zog Geschäfte, ist es wieder 1-2 Geschäfte.
Wenn ich mir die Historie ansehe, scheint es, dass der Indikator gut handeln sollte, aber sobald ich zum Echtzeithandel wechsle, erhalte ich alle Arten von seltsamen Dingen.
Bitte erklären Sie, warum? Hier ist der Code des Indikators:
//---- indicator settings#property indicator_chart_window#property indicator_buffers2#property indicator_color1 Blue
#property indicator_color2 Red
//---- indicator parametersexternint period = 4; //12externint shift = 0; //сдвиг по бару//---- indicator buffersdouble BufferUp[],BufferDn[];
int q,st=5;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
IndicatorBuffers(2);
//---- drawing settings
SetIndexStyle(0,DRAW_ARROW,2);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW,2);
SetIndexArrow(1,234);
SetIndexBuffer(0,BufferUp);//стрелка синяя верхSetIndexBuffer(1,BufferDn);//стрелка красная вниз//---- name for DataWindow and indicator subwindow label
IndicatorShortName("T3MA-ALARM ("+period+")");
//---- initialization doneif(Digits==3 || Digits==5) q=10;
st=st*q;
return(0);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int deinit()
{
ObjectDelete("low");
ObjectDelete("high");
}
//+----------------------------------------------------------------------+//| Moving Average of Oscillator |//+----------------------------------------------------------------------+int start()
{
//---- ArraySetAsSeries -------------------------------------------------- double Ma[],MaOn[];
double y0[],y1[],y2[];
// int i;int i;
ArraySetAsSeries(Ma,true);
//---- IndicatorCounted --------------------------------------------------int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit1=Bars-counted_bars;
if(counted_bars==0) limit1-=1+MathMax(period,shift)+2;
int buffer_size=ArraySize(BufferUp);
ArrayResize(Ma,buffer_size);
ArrayResize(MaOn,buffer_size);
ArrayResize(y0,buffer_size+shift+2);
ArrayResize(y1,buffer_size+shift+2);
ArrayResize(y2,buffer_size+shift+2);
int limit=ArraySize(Ma);
//---- EMA --------------------------------------------------------------- for(i=limit1; i>=0; i--) Ma[i] =iMA(NULL,0,period,0,MODE_EMA,PRICE_CLOSE,i);
for(i=limit1; i>=0; i--) MaOn[i]=iMAOnArray(Ma,limit,period,0,MODE_EMA,i);
for(i=limit1; i>=0; i--)
{
y0[i+shift]=MaOn[i+shift];
y1[i+1+shift]=MaOn[i+1+shift];
y2[i+2+shift]=MaOn[i+2+shift];
if(y0[i+shift]-y1[i+1+shift]<0 && y1[i+1+shift]-y2[i+2+shift]>0){BufferDn[i+1]=High[i+1]+st*Point;}
if(y0[i+shift]-y1[i+1+shift]>0 && y1[i+1+shift]-y2[i+2+shift]<0){BufferUp[i+1]=Low[i+1]-st*Point;}
//---- Signal Trend Up || Dn --------------------------------------------- if(y0[i]-y1[i+1]>0) Comment("\n SWAPLONG = ",MarketInfo(Symbol(),MODE_SWAPLONG),
" SWAPSHORT = ",MarketInfo(Symbol(),MODE_SWAPSHORT),"\n BUY TREND ",DoubleToStr(Close[i],Digits));
elseif(y0[i]-y1[i+1]<0) Comment("\n SWAPLONG = ",MarketInfo(Symbol(),MODE_SWAPLONG),
" SWAPSHORT = ",MarketInfo(Symbol(),MODE_SWAPSHORT),"\n SELL TREND ",DoubleToStr(Close[i],Digits));
}
//---- donereturn(0);
}
//+---------------------------------------------------------------------+
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
Vitaly, ich habe festgestellt, dass die Leute eine Frage schreiben und sich dann um ihre Angelegenheiten kümmern, während wir uns miteinander amüsieren. Manchmal sind es mehrere Seiten mit Auszügen.
Versuchen Sie, an drei Stellen die 0 durch eine 1 zu ersetzen
Ich danke Ihnen vielmals. Wie schaffe ich es nun, dass die Trades nur am Ende der aktuellen Kerze im aktuellen Zeitrahmen geöffnet werden? :)) Ich weiß nicht, wann das Geschäft eröffnet wird... Die Pfeile scheinen richtig zu sein, und schauen Sie sich die Candlesticks, alles ist in Ordnung, aber Angebote scheinen in der Mitte oder in der Nähe des Endes der Kerze geöffnet werden, im Allgemeinen, überall, aber nicht, wo es gebraucht wird. :(
//---- indicator settings#property indicator_chart_window#property indicator_buffers2#property indicator_color1 Blue
#property indicator_color2 Red
//---- indicator parametersexternint period = 4; //12externint shift = 0; //сдвиг по бару//---- indicator buffersdouble BufferUp[],BufferDn[];
int q,st=5;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
IndicatorBuffers(2);
//---- drawing settings
SetIndexStyle(0,DRAW_ARROW,2);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW,2);
SetIndexArrow(1,234);
SetIndexBuffer(0,BufferUp);//стрелка синяя верхSetIndexBuffer(1,BufferDn);//стрелка красная вниз//---- name for DataWindow and indicator subwindow label
IndicatorShortName("T3MA-ALARM ("+period+")");
//---- initialization doneif(Digits==3 || Digits==5) q=10;
st=st*q;
return(0);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int deinit()
{
ObjectDelete("low");
ObjectDelete("high");
}
//+----------------------------------------------------------------------+//| Moving Average of Oscillator |//+----------------------------------------------------------------------+int start()
{
//---- ArraySetAsSeries -------------------------------------------------- double Ma[],MaOn[];
double y0[],y1[],y2[];
// int i;int i;
ArraySetAsSeries(Ma,true);
//---- IndicatorCounted --------------------------------------------------int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit1=Bars-counted_bars;
if(counted_bars==0) limit1-=1+MathMax(period,shift)+2;
int buffer_size=ArraySize(BufferUp);
ArrayResize(Ma,buffer_size);
ArrayResize(MaOn,buffer_size);
ArrayResize(y0,buffer_size+shift+2);
ArrayResize(y1,buffer_size+shift+2);
ArrayResize(y2,buffer_size+shift+2);
int limit=ArraySize(Ma);
//---- EMA --------------------------------------------------------------- for(i=limit1; i>=1; i--) Ma[i] =iMA(NULL,0,period,0,MODE_EMA,PRICE_CLOSE,i);
for(i=limit1; i>=1; i--) MaOn[i]=iMAOnArray(Ma,limit,period,0,MODE_EMA,i);
for(i=limit1; i>=1; i--)
{
y0[i+shift]=MaOn[i+shift];
y1[i+1+shift]=MaOn[i+1+shift];
y2[i+2+shift]=MaOn[i+2+shift];
if(y0[i+shift]-y1[i+1+shift]<0 && y1[i+1+shift]-y2[i+2+shift]>0){BufferDn[i+1]=High[i+1]+st*Point;}
if(y0[i+shift]-y1[i+1+shift]>0 && y1[i+1+shift]-y2[i+2+shift]<0){BufferUp[i+1]=Low[i+1]-st*Point;}
//---- Signal Trend Up || Dn --------------------------------------------- if(y0[i]-y1[i+1]>0) Comment("\n SWAPLONG = ",MarketInfo(Symbol(),MODE_SWAPLONG),
" SWAPSHORT = ",MarketInfo(Symbol(),MODE_SWAPSHORT),"\n BUY TREND ",DoubleToStr(Close[i],Digits));
elseif(y0[i]-y1[i+1]<0) Comment("\n SWAPLONG = ",MarketInfo(Symbol(),MODE_SWAPLONG),
" SWAPSHORT = ",MarketInfo(Symbol(),MODE_SWAPSHORT),"\n SELL TREND ",DoubleToStr(Close[i],Digits));
}
//---- donereturn(0);
}
//+---------------------------------------------------------------------+
Im Allgemeinen ist es üblich, Trades in dem Moment zu eröffnen, in dem sich eine neue Kerze bildet, wenn bereits alle Informationen über die Kerze vorliegen, die gerade geschlossen wurde
int limit=ArraySize(Ma);
//---- EMA --------------------------------------------------------------- // а не вот сюда?for(i=limit1; i>=1; i--) Ma[i] =iMA(NULL,0,period,0,MODE_EMA,PRICE_CLOSE,i);
for(i=limit1; i>=1; i--) MaOn[i]=iMAOnArray(Ma,limit,period,0,MODE_EMA,i);
for(i=limit1; i>=1; i--)
Im Allgemeinen ist es üblich, Trades in dem Moment zu eröffnen, in dem sich eine neue Kerze bildet, wenn bereits alle Informationen über die Kerze vorliegen, die gerade geschlossen wurde
Wo muss ich diesen Code einfügen, damit er richtig funktioniert? Ich verstehe es nicht sehr gut, ich stehe erst am Anfang meiner Reise...
Aleksei Stepanenko: Vitaly, ich habe festgestellt, dass die Leute eine Frage schreiben und sich dann um ihre Angelegenheiten kümmern, während wir uns miteinander amüsieren. Manchmal sind es mehrere Seiten mit Auszügen.
Ich versuche, den Indikator Puffer vom anderen Ende (ArraySetAsSeries (..., false)) zu füllen, alles funktioniert gut für eine Weile, aber dann passiert etwas mit dem Puffer und der allerletzte Array-Index wird gefüllt, obwohl es nicht sein sollte.
Ich vermute, dass das Terminal den Puffer irgendwann abschneidet und das Gewicht des Puffers sogar mit dem letzten Array-Index gefüllt ist. Vielleicht sollte der Array-Puffer irgendwann freigegeben werden, aber wann? Können Sie das Testbeispiel korrigieren?
Hallo.
Können Sie mir bitte sagen, warum dieser Indikator nur selten Pfeile in der Historie zeichnet, aber wenn Sie mit dem Handel beginnen, beginnt er häufig zu zeichnen.
Dann, wenn Sie MT4 schließen und öffnen Sie es wieder, dann an der gleichen Stelle, wo in Echtzeit der Indikator wie ein Maschinengewehr zog Geschäfte, ist es wieder 1-2 Geschäfte.
Wenn ich mir die Historie ansehe, scheint es, dass der Indikator gut handeln sollte, aber sobald ich zum Echtzeithandel wechsle, erhalte ich alle Arten von seltsamen Dingen.
Bitte erklären Sie, warum? Hier ist der Code des Indikators:
Versuchen Sie, an drei Stellen die 0 durch eine 1 zu ersetzen
Versuchen Sie, an drei Stellen die 0 durch eine 1 zu ersetzen
Ich würde auch dies verschieben
Versuchen Sie, an drei Stellen die 0 durch eine 1 zu ersetzen
Ich danke Ihnen vielmals. Wie schaffe ich es nun, dass die Trades nur am Ende der aktuellen Kerze im aktuellen Zeitrahmen geöffnet werden? :)) Ich weiß nicht, wann das Geschäft eröffnet wird... Die Pfeile scheinen richtig zu sein, und schauen Sie sich die Candlesticks, alles ist in Ordnung, aber Angebote scheinen in der Mitte oder in der Nähe des Endes der Kerze geöffnet werden, im Allgemeinen, überall, aber nicht, wo es gebraucht wird. :(
Im Allgemeinen ist es üblich, Trades in dem Moment zu eröffnen, in dem sich eine neue Kerze bildet, wenn bereits alle Informationen über die Kerze vorliegen, die gerade geschlossen wurde
Ich würde das auch verschieben.
Sind Sie sicher, dass man Ihnen das gezeigt hat?
Im Allgemeinen ist es üblich, Trades in dem Moment zu eröffnen, in dem sich eine neue Kerze bildet, wenn bereits alle Informationen über die Kerze vorliegen, die gerade geschlossen wurde
Vitaly, ich habe festgestellt, dass die Leute eine Frage schreiben und sich dann um ihre Angelegenheiten kümmern, während wir uns miteinander amüsieren. Manchmal sind es mehrere Seiten mit Auszügen.