Заодно хоть понять как переделать старые эксперты на новые
Разница вроде в объявлении переменных
Где еще подсветите цветом плз
Разница вроде в объявлении переменных
Где еще подсветите цветом плз
"MQL 4 код вставляйте в тег pre"
mql II тоже считается кодом.
mql II тоже считается кодом.
/*[[
Name := ASCTrend1sig
Author := C0Rpus - big thanks CHANGE2002, STEPAN and SERSH
Notes := ASCTrend1sig 3.0 Open Source
Separate Window := No
First Color := Fuchsia
First Draw Type := Symbol
First Symbol := 108
Use Second Data := Yes
Second Color := Aqua
Second Draw Type := Symbol
Second Symbol := 108
]]*/
Inputs: RISK(3),AllBars(500);
Variables: value2(0),value3(0),value10(10),value11(0),x1(70),x2(30),i1(0);
Variables: TrueCount(0),Counter(0),Range(0),AvgRange(0),MRO1(0),MRO2(0);
Variables: val1(0),val2(0),shift(0),NumBars(500),AlertTime(0);
Array: Table_value2[500,2](0);
SetLoopCount(0);
value10=3+RISK*2;
x1=67+RISK;
x2=33-RISK;
value11=value10;
If Bars<AllBars Then NumBars=Bars-11 Else NumBars=AllBars;
//For shift=0 To AllBars Begin
For shift=NumBars DownTo 0 Begin
Counter=shift;
Range=0;
AvgRange=0;
For Counter=shift To shift+9
{AvgRange=AvgRange+Abs(High[Counter]-Low[Counter]);
};
Range=AvgRange/10;
Counter=shift;
TrueCount=0;
While (Counter<shift+9 And TrueCount<1)
{If Abs(Open[Counter]-Close[Counter+1])>=Range*2.0 Then TrueCount=TrueCount+1;
Counter=Counter+1;
};
If TrueCount>=1 Then MRO1=Counter Else MRO1=-1;
Counter=shift;
TrueCount=0;
While (Counter<shift+6 And TrueCount<1)
{If Abs(Close[Counter+3]-Close[Counter])>=Range*4.6 Then TrueCount=TrueCount+1;
Counter=Counter+1;
};
If TrueCount>=1 Then MRO2=Counter Else MRO2=-1;
If MRO1>-1 Then value11=3 Else value11=value10;
If MRO2>-1 Then value11=4 Else value11=value10;
value2=100-Abs(iWPR(value11,shift)); // PercentR(value11=9)
Table_value2[shift,1]=shift;
Table_value2[shift,2]=value2;
val1=0;
val2=0;
value3=0;
If value2<x2 Then
{i1=1;
While (Table_value2[shift+i1,2]>=x2 And Table_value2[shift+i1,2]<=x1)
{i1=i1+1;};
If Table_value2[shift+i1,2]>x1 Then
{value3=High[shift]+Range*0.5;
val1=value3;
};
};
If value2>x1 Then
{i1=1;
While (Table_value2[shift+i1,2]>=x2 And Table_value2[shift+i1,2]<=x1)
{i1=i1+1;};
If Table_value2[shift+i1,2]<x2 Then
{value3=Low[shift]-Range*0.5;
val2=value3;
};
};
SetIndexValue(shift,val1);
SetIndexValue2(shift,val2);
End;
if CurTime > AlertTime then
{
if val1 > 0 then
{
Alert(Symbol, ", M", Period, ": SELL Signal.");
AlertTime = CurTime + (Period - mod(Minute, Period))*60;
};
if val2 > 0 then
{
Alert(Symbol, ", M", Period, ": BUY Signal.");
AlertTime = CurTime + (Period - mod(Minute, Period))*60;
};
};
//+------------------------------------------------------------------+
//| ASCTrend1
//| Ramdass - Conversion only
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua
//---- input parameters
extern int RISK=3;
extern int CountBars=300;
//---- buffers
double val1[];
double val2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator line
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_HISTOGRAM,0,2);
SetIndexStyle(1,DRAW_HISTOGRAM,0,2);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| ASCTrend1 |
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars+11+1);
SetIndexDrawBegin(1,Bars-CountBars+11+1);
int i,shift,counted_bars=IndicatorCounted();
int Counter,i1,value10,value11;
double value1,x1,x2;
double value2,value3;
double TrueCount,Range,AvgRange,MRO1,MRO2;
value10=3+RISK*2;
x1=67+RISK;
x2=33-RISK;
value11=value10;
//----
if(Bars<=value11+1) return(0);
//---- initial zero
if(counted_bars<value11+1)
{
for(i=1;i<=0;i++) val1[CountBars-i]=0.0;
for(i=1;i<=0;i++) val2[CountBars-i]=0.0;
}
//----
shift=CountBars-11-1;
while(shift>=0)
{
Counter=shift;
Range=0.0;
AvgRange=0.0;
for (Counter=shift; Counter<=shift+9; Counter++) AvgRange=AvgRange+MathAbs(High[Counter]-Low[Counter]);
Range=AvgRange/10;
Counter=shift;
TrueCount=0;
while (Counter<shift+9 && TrueCount<1)
{if (MathAbs(Open[Counter]-Close[Counter+1])>=Range*2.0) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=1) {MRO1=Counter;} else {MRO1=-1;}
Counter=shift;
TrueCount=0;
while (Counter<shift+6 && TrueCount<1)
{if (MathAbs(Close[Counter+3]-Close[Counter])>=Range*4.6) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=1) {MRO2=Counter;} else {MRO2=-1;}
if (MRO1>-1) {value11=3;} else {value11=value10;}
if (MRO2>-1) {value11=4;} else {value11=value10;}
value2=100-MathAbs(iWPR(NULL,0,value11,shift)); // PercentR(value11=9)
val1[shift]=0;
val2[shift]=0;
if (value2>x1)
{
val1[shift]=Low[shift]; val2[shift]=High[shift];
}
if (value2<x2)
{
val1[shift]=High[shift]; val2[shift]=Low[shift];
}
shift--;
}
return(0);
}
//+------------------------------------------------------------------+
//| ASCTrend1
//| Ramdass - Conversion only
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua
//---- input parameters
extern int RISK=3;
extern int CountBars=300;
//---- buffers
double val1[];
double val2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator line
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_HISTOGRAM,0,2);
SetIndexStyle(1,DRAW_HISTOGRAM,0,2);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| ASCTrend1 |
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars+11+1);
SetIndexDrawBegin(1,Bars-CountBars+11+1);
int i,shift,counted_bars=IndicatorCounted();
int Counter,i1,value10,value11;
double value1,x1,x2;
double value2,value3;
double TrueCount,Range,AvgRange,MRO1,MRO2;
value10=3+RISK*2;
x1=67+RISK;
x2=33-RISK;
value11=value10;
//----
if(Bars<=value11+1) return(0);
//---- initial zero
if(counted_bars<value11+1)
{
for(i=1;i<=0;i++) val1[CountBars-i]=0.0;
for(i=1;i<=0;i++) val2[CountBars-i]=0.0;
}
//----
shift=CountBars-11-1;
while(shift>=0)
{
Counter=shift;
Range=0.0;
AvgRange=0.0;
for (Counter=shift; Counter<=shift+9; Counter++) AvgRange=AvgRange+MathAbs(High[Counter]-Low[Counter]);
Range=AvgRange/10;
Counter=shift;
TrueCount=0;
while (Counter<shift+9 && TrueCount<1)
{if (MathAbs(Open[Counter]-Close[Counter+1])>=Range*2.0) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=1) {MRO1=Counter;} else {MRO1=-1;}
Counter=shift;
TrueCount=0;
while (Counter<shift+6 && TrueCount<1)
{if (MathAbs(Close[Counter+3]-Close[Counter])>=Range*4.6) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=1) {MRO2=Counter;} else {MRO2=-1;}
if (MRO1>-1) {value11=3;} else {value11=value10;}
if (MRO2>-1) {value11=4;} else {value11=value10;}
value2=100-MathAbs(iWPR(NULL,0,value11,shift)); // PercentR(value11=9)
val1[shift]=0;
val2[shift]=0;
if (value2>x1)
{
val1[shift]=Low[shift]; val2[shift]=High[shift];
}
if (value2<x2)
{
val1[shift]=High[shift]; val2[shift]=Low[shift];
}
shift--;
}
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| ASCTrend1sig_noSound.mq4
//| Ramdass - Conversion only
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua
//---- input parameters
extern int RISK=3;
extern int CountBars=300;
//---- buffers
double val1[];
double val2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator line
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,108);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,108);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| ASCTrend1sig |
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=1000) CountBars=950;
SetIndexDrawBegin(0,Bars-CountBars+11+1);
SetIndexDrawBegin(1,Bars-CountBars+11+1);
int i,shift,counted_bars=IndicatorCounted();
int Counter,i1,value10,value11;
double value1,x1,x2;
double value2,value3;
double TrueCount,Range,AvgRange,MRO1,MRO2;
double Table_value2[1000];
value10=3+RISK*2;
x1=67+RISK;
x2=33-RISK;
value11=value10;
//----
if(Bars<=11+1) return(0);
//---- initial zero
if(counted_bars<11+1)
{
for(i=1;i<=0;i++) val1[CountBars-i]=0.0;
for(i=1;i<=0;i++) val2[CountBars-i]=0.0;
}
//----
shift=CountBars-11-1;
while(shift>=0)
{
Counter=shift;
Range=0.0;
AvgRange=0.0;
for (Counter=shift; Counter<=shift+9; Counter++) AvgRange=AvgRange+MathAbs(High[Counter]-Low[Counter]);
Range=AvgRange/10;
Counter=shift;
TrueCount=0;
while (Counter<shift+9 && TrueCount<1)
{if (MathAbs(Open[Counter]-Close[Counter+1])>=Range*2.0) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=1) {MRO1=Counter;} else {MRO1=-1;}
Counter=shift;
TrueCount=0;
while (Counter<shift+6 && TrueCount<1)
{if (MathAbs(Close[Counter+3]-Close[Counter])>=Range*4.6) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=1) {MRO2=Counter;} else {MRO2=-1;}
if (MRO1>-1) {value11=3;} else {value11=value10;}
if (MRO2>-1) {value11=4;} else {value11=value10;}
value2=100-MathAbs(iWPR(NULL,0,value11,shift)); // PercentR(value11=9)
Table_value2[shift]=value2;
val1[shift]=0;
val2[shift]=0;
value3=0;
if (value2<x2)
{i1=1;
while (Table_value2[shift+i1]>=x2 && Table_value2[shift+i1]<=x1){i1++;}
if (Table_value2[shift+i1]>x1)
{
value3=High[shift]+Range*0.5;
val1[shift]=value3;
}
}
if (value2>x1)
{i1=1;
while (Table_value2[shift+i1]>=x2 && Table_value2[shift+i1]<=x1){i1++;}
if (Table_value2[shift+i1]<x2)
{
value3=Low[shift]-Range*0.5;
val2[shift]=value3;
}
}
shift--;
}
return(0);
}
//+------------------------------------------------------------------+
//| ASCTrend1sig_noSound.mq4
//| Ramdass - Conversion only
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua
//---- input parameters
extern int RISK=3;
extern int CountBars=300;
//---- buffers
double val1[];
double val2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator line
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,108);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,108);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| ASCTrend1sig |
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=1000) CountBars=950;
SetIndexDrawBegin(0,Bars-CountBars+11+1);
SetIndexDrawBegin(1,Bars-CountBars+11+1);
int i,shift,counted_bars=IndicatorCounted();
int Counter,i1,value10,value11;
double value1,x1,x2;
double value2,value3;
double TrueCount,Range,AvgRange,MRO1,MRO2;
double Table_value2[1000];
value10=3+RISK*2;
x1=67+RISK;
x2=33-RISK;
value11=value10;
//----
if(Bars<=11+1) return(0);
//---- initial zero
if(counted_bars<11+1)
{
for(i=1;i<=0;i++) val1[CountBars-i]=0.0;
for(i=1;i<=0;i++) val2[CountBars-i]=0.0;
}
//----
shift=CountBars-11-1;
while(shift>=0)
{
Counter=shift;
Range=0.0;
AvgRange=0.0;
for (Counter=shift; Counter<=shift+9; Counter++) AvgRange=AvgRange+MathAbs(High[Counter]-Low[Counter]);
Range=AvgRange/10;
Counter=shift;
TrueCount=0;
while (Counter<shift+9 && TrueCount<1)
{if (MathAbs(Open[Counter]-Close[Counter+1])>=Range*2.0) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=1) {MRO1=Counter;} else {MRO1=-1;}
Counter=shift;
TrueCount=0;
while (Counter<shift+6 && TrueCount<1)
{if (MathAbs(Close[Counter+3]-Close[Counter])>=Range*4.6) TrueCount=TrueCount+1;
Counter=Counter+1;
}
if (TrueCount>=1) {MRO2=Counter;} else {MRO2=-1;}
if (MRO1>-1) {value11=3;} else {value11=value10;}
if (MRO2>-1) {value11=4;} else {value11=value10;}
value2=100-MathAbs(iWPR(NULL,0,value11,shift)); // PercentR(value11=9)
Table_value2[shift]=value2;
val1[shift]=0;
val2[shift]=0;
value3=0;
if (value2<x2)
{i1=1;
while (Table_value2[shift+i1]>=x2 && Table_value2[shift+i1]<=x1){i1++;}
if (Table_value2[shift+i1]>x1)
{
value3=High[shift]+Range*0.5;
val1[shift]=value3;
}
}
if (value2>x1)
{i1=1;
while (Table_value2[shift+i1]>=x2 && Table_value2[shift+i1]<=x1){i1++;}
if (Table_value2[shift+i1]<x2)
{
value3=Low[shift]-Range*0.5;
val2[shift]=value3;
}
}
shift--;
}
return(0);
}
//+------------------------------------------------------------------+
не присоединяется :(
С тебя пиво =)))
//+------------------------------------------------------------------+
//| ASC_Trend_1sig.mq4 |
//| komposter |
//| mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "komposter"
#property link "mailto:komposterius@mail.ru"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Lime
extern int RISK = 3;
double buf0[];
double buf1[];
int init()
{
IndicatorShortName( "ASC_Trend" );
IndicatorDigits ( MarketInfo( Symbol(), MODE_DIGITS ) );
SetIndexBuffer( 0 , buf0 );
SetIndexStyle ( 0 , DRAW_ARROW , STYLE_SOLID , 3 );
SetIndexArrow( 0 , 218);
SetIndexDrawBegin( 0 , 12 );
SetIndexLabel( 0 , "ASC_Trend_Down");
SetIndexBuffer( 1 , buf1 );
SetIndexStyle ( 1 , DRAW_ARROW , STYLE_SOLID , 3 );
SetIndexArrow( 1 , 217);
SetIndexDrawBegin( 1 , 12 );
SetIndexLabel( 1 , "ASC_Trend_Up");
return(0);
}
int start()
{
int counted_bars=IndicatorCounted();
if ( Bars <= 12 ) return(0);
if ( counted_bars < 0 ) return(-1);
if ( counted_bars > 0 ) counted_bars -- ;
int limit = Bars - 12;
if ( counted_bars > 0 ) { limit = Bars - counted_bars - 12; }
int value10 = 3 + RISK * 2;
double x1 = 67 + RISK;
double x2 = 33 - RISK;
double AvgRange, Range, value1, value2, value3, value22, val1, val2, MRO1, MRO2;
int Counter, value11, i;
for ( int shift = limit; shift >= 0; shift -- )
{
val1 = 0;
val2 = 0;
AvgRange = 0;
for ( Counter = shift; Counter <= shift + 9; Counter ++ )
{ AvgRange += MathAbs( High[Counter] - Low[Counter] ); }
Range = AvgRange / 10;
MRO1 = -1;
for ( Counter = shift; Counter < shift + 9; Counter ++ )
{
if ( MathAbs( Open[Counter] - Close[Counter+1] ) >= Range * 2 )
{ MRO1 = Counter; break; }
}
MRO2 = -1;
for ( Counter = shift; Counter < shift + 6; Counter ++ )
{
if ( MathAbs( Close[Counter+3] - Close[Counter] ) >= Range*4.6 )
{ MRO2 = Counter; break; }
}
if ( MRO1 > -1 ) { value11 = 3; } else { value11 = value10; }
if ( MRO2 > -1 ) { value11 = 4; } else { value11 = value10; }
value2 = 100 - MathAbs( iWPR( Symbol(), 0, value11, shift) ); // PercentR(value11=9)
value3 = 0;
if ( value2 < x2 )
{
for ( i = 1; 100 - MathAbs( iWPR( Symbol(), 0, value11, shift+i) ) >= x2 &&
100 - MathAbs( iWPR( Symbol(), 0, value11, shift+i) ) <= x1; i ++ )
{ value22 = 100 - MathAbs( iWPR( Symbol(), 0, value11, shift+i) ); }
if ( 100 - MathAbs( iWPR( Symbol(), 0, value11, shift+i) ) > x1 )
{
value3 = High[shift] + Range * 0.5;
val1 = value3;
}
}
if ( value2 > x1 )
{
for ( i = 1; 100 - MathAbs( iWPR( Symbol(), 0, value11, shift+i) ) >= x2 &&
100 - MathAbs( iWPR( Symbol(), 0, value11, shift+i) ) <= x1; i ++ )
{}
if ( 100 - MathAbs( iWPR( Symbol(), 0, value11, shift+i) ) < x2 )
{
value3=Low[shift]-Range*0.5;
val2=value3;
}
}
buf0[shift] = val1;
buf1[shift] = val2;
}
return(0);
}
int deinit()
{
return(0);
}
prodox, я тут для личных нужд оптимизировал этот индюк, и пока разбирался в принципах построения наткнулся на несколько интересных моментов. Может, поможешь разобраться? Если знаешь, конечно...
Вот, собственно код:
Вот, собственно код:
//+------------------------------------------------------------------+
//| ASC_Trend_1sig.mq4 |
//| komposter |
//| mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "komposter"
#property link "mailto:komposterius@mail.ru"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
extern int RISK = 3;
double buf0[]; //ASC_Trend_Up
double buf1[]; //ASC_Trend_Down
int init()
{
IndicatorShortName( "ASC_Trend" );
IndicatorDigits ( MarketInfo( Symbol(), MODE_DIGITS ) );
SetIndexBuffer( 0 , buf0 );
SetIndexStyle ( 0 , DRAW_ARROW , EMPTY , 3 );
SetIndexArrow( 0 , 217);
SetIndexDrawBegin( 0 , 12 );
SetIndexLabel( 0 , "ASC_Trend_Up");
SetIndexBuffer( 1 , buf1 );
SetIndexStyle ( 1 , DRAW_ARROW , EMPTY , 3 );
SetIndexArrow( 1 , 218);
SetIndexDrawBegin( 1 , 12 );
SetIndexLabel( 1 , "ASC_Trend_Down");
return(0);
}
int ASC_Trend_Prev = 1;
int start()
{
int counted_bars=IndicatorCounted();
if ( Bars <= 100 ) return(-1);
if ( counted_bars < 0 ) return(-1);
if ( counted_bars > 0 ) counted_bars -- ;
int limit = Bars - 12;
if ( counted_bars > 0 ) { limit = Bars - counted_bars - 12; }
double x1 = 67 + RISK, x2 = 33 - RISK;
for ( int i = limit; i >= 0; i -- )
{
double ASC_Trend_Up = 0, ASC_Trend_Down = 0, SummRange = 0, AvgRange = 0;
for ( int u = i + 10; u > i; u -- )
{ SummRange += High[u] - Low[u]; }
AvgRange = SummRange / 10;
int WprPeriod = 3 + RISK * 2;
for ( u = i + 10; u > i; u -- )
{
if ( MathAbs( Open[u] - Close[u+1] ) >= AvgRange * 2 )
{ WprPeriod = 3; break; }
}
for ( u = i + 7; u > i; u -- )
{
if ( MathAbs( Close[u+3] - Close[u] ) >= AvgRange * 4.6 )
{ WprPeriod = 4; break; }
}
double WprAbs = 100 + iWPR( Symbol(), 0, WprPeriod, i );
if ( WprAbs > x1 && ASC_Trend_Prev == -1 )
{ ASC_Trend_Up = Low[i] - AvgRange * 0.5; ASC_Trend_Prev = 1; }
if ( WprAbs < x2 && ASC_Trend_Prev == 1 )
{ ASC_Trend_Down = High[i] + AvgRange * 0.5; ASC_Trend_Prev = -1; }
buf0[i] = ASC_Trend_Up;
buf1[i] = ASC_Trend_Down;
}
return(0);
}
int deinit()
{
return(0);
}
а моменты следующие:
индюк этот - это просто критические значения WPR (>70 и <30). но он очень хитро выбирает для него период..
по умолчанию он (период) = 9. но вот если соблюдается условие
for ( u = i + 10; u > i; u -- )
{
if ( MathAbs( Open[u] - Close[u+1] ) >= AvgRange * 2 )
{ WprPeriod = 3; break; }
}
т.е. один из 10 предыдущих баров открывается на приличном расстоянии от предыдущего, период резко становится = 3 :) причём вне зависимости от входящего значения RISK... загадочно это....
Может, есть описание этого индюка и системы, построенной на нём? Желательно на руском..
Может, есть описание этого индюка и системы, построенной на нём? Желательно на руском..
Система называется ASCTrend и самые разные версии Вы сможете найти на ПАУКЕ или Виаке - разновидности Сильвер тренд и Альтер Тренд. Только это ОДИН из индикаторов этой стратегии и только по нему торговать нельзя - слишком много ложных сигналов. Описание есть на русском на ПАУКЕ точно.
Посмотрите здесь, например. http://forex.kbpauk.ru/postlist.php?Cat=&Board=trend
Удачи.
Vladislav, спасибо
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Name := ASCTrend1sig
Author := C0Rpus - big thanks CHANGE2002, STEPAN and SERSH
Notes := ASCTrend1sig 3.0 Open Source
Separate Window := No
First Color := Fuchsia
First Draw Type := Symbol
First Symbol := 108
Use Second Data := Yes
Second Color := Aqua
Second Draw Type := Symbol
Second Symbol := 108
]]*/
Inputs: RISK(3),AllBars(500);
Variables: value2(0),value3(0),value10(10),value11(0),x1(70),x2(30),i1(0);
Variables: TrueCount(0),Counter(0),Range(0),AvgRange(0),MRO1(0),MRO2(0);
Variables: val1(0),val2(0),shift(0),NumBars(500),AlertTime(0);
Array: Table_value2[500,2](0);
SetLoopCount(0);
value10=3+RISK*2;
x1=67+RISK;
x2=33-RISK;
value11=value10;
If Bars<AllBars Then NumBars=Bars-11 Else NumBars=AllBars;
//For shift=0 To AllBars Begin
For shift=NumBars DownTo 0 Begin
Counter=shift;
Range=0;
AvgRange=0;
For Counter=shift To shift+9
{AvgRange=AvgRange+Abs(High[Counter]-Low[Counter]);
};
Range=AvgRange/10;
Counter=shift;
TrueCount=0;
While (Counter<shift+9 And TrueCount<1)
{If Abs(Open[Counter]-Close[Counter+1])>=Range*2.0 Then TrueCount=TrueCount+1;
Counter=Counter+1;
};
If TrueCount>=1 Then MRO1=Counter Else MRO1=-1;
Counter=shift;
TrueCount=0;
While (Counter<shift+6 And TrueCount<1)
{If Abs(Close[Counter+3]-Close[Counter])>=Range*4.6 Then TrueCount=TrueCount+1;
Counter=Counter+1;
};
If TrueCount>=1 Then MRO2=Counter Else MRO2=-1;
If MRO1>-1 Then value11=3 Else value11=value10;
If MRO2>-1 Then value11=4 Else value11=value10;
value2=100-Abs(iWPR(value11,shift)); // PercentR(value11=9)
Table_value2[shift,1]=shift;
Table_value2[shift,2]=value2;
val1=0;
val2=0;
value3=0;
If value2<x2 Then
{i1=1;
While (Table_value2[shift+i1,2]>=x2 And Table_value2[shift+i1,2]<=x1)
{i1=i1+1;};
If Table_value2[shift+i1,2]>x1 Then
{value3=High[shift]+Range*0.5;
val1=value3;
};
};
If value2>x1 Then
{i1=1;
While (Table_value2[shift+i1,2]>=x2 And Table_value2[shift+i1,2]<=x1)
{i1=i1+1;};
If Table_value2[shift+i1,2]<x2 Then
{value3=Low[shift]-Range*0.5;
val2=value3;
};
};
SetIndexValue(shift,val1);
SetIndexValue2(shift,val2);
End;
if CurTime > AlertTime then
{
if val1 > 0 then
{
Alert(Symbol, ", M", Period, ": SELL Signal.");
AlertTime = CurTime + (Period - mod(Minute, Period))*60;
};
if val2 > 0 then
{
Alert(Symbol, ", M", Period, ": BUY Signal.");
AlertTime = CurTime + (Period - mod(Minute, Period))*60;
};
};