| |
 |
ASC Trend ++ Expert(v.2.1)
|
 |
|
|
|
Views:
1475 |
| Added: November 16, 2008 |
| |
|
|
|
| This formula has not been rated yet |
| |
| |
email this link
|
| |
| |
| Tags:
MetaTrader, system
|
| |
 |
ASC++ Expert(v.2.1) ASC Trend based expert (corrected version
Code:
/*[[
Name := ASC++ Expert
Author := Copyright c 2004, Jens Daniel
Link :=
Notes :=
Lots := 1
Stop Loss := 0
Take Profit := 200
Trailing Stop := 0
]]*/
Defines: slippage(3),RISK(3),EntryStopLevel(10),EntryRange(27),TSLevel1(30),TSLevel2(60),SigValMin(5);
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: i(0),val1(0), val2(0), shift(0),t0(0),TradesOnSymbol(0),cnt1(0);
Variable : AvgRange3(0),trend2(0),price2(0),value30(0),dK2(0);
Variable : V1(0),V2(0),P1(9),n1(9),n2(49),V3(0),V4(0),P2(54),wprfast(0),wprslow(0),cnt(0);
Variable : bar(0),value(0),price(0),trend(0),dK(0), AvgRange2(0),WATR(0),StartBars(1),AveragePeriod(10),Reg(1);
Variable : ESLevel(0),vartime(0),SigValBuy(0),SigValSell(0),SigValBuy1(0),SigValSell1(0),timecntsell(0),timecntbuy(0),sl(0);
array: nrtrr[10](0),nrtrg[10](0),nrtrwatrr[10](0),nrtrwatrg[10](0),ascsigbuy[30](0),ascsigsell[30](0),Table_value2[50,2](0);
t0 = StrToTime("2004.01.01 0:00");
if curtime>t0 then Begin
value10=3+RISK*2;
x1=67+RISK;
x2=33-RISK;
value11=value10;
//--------------------------------------------------------------------------------------------------------------------
V1=iWPR(P1,cnt)*iWPR(P1,cnt)/100;
V2=Ceil(V1);
If V2n2 then wprfast=-(V2);
V3=iWPR(P2,cnt)*iWPR(P2,cnt)/100;
V4=Ceil(V3);
If V4n2 then wprslow=-(V4);
//----------------------------------------------------------------------------------------------------------------------
AvgRange2=0;
for i=AveragePeriod DownTo 1 {
dK = 1+(AveragePeriod-i)/AveragePeriod;
AvgRange2=AvgRange2+ dK*Abs(High[i]-Low[i]);
};
WATR = AvgRange2/AveragePeriod;
if Close[StartBars-1] > Open[StartBars-1] then {
value = Close[StartBars - 1] * (1 - WATR);
trend = 1;
nrtrwatrg[0]= value;
nrtrwatrr[0]= 0;
};
if Close[StartBars-1] < Open[StartBars-1] then {
value = Close[StartBars - 1] * (1 + WATR);
trend = -1;
nrtrwatrr[0]= value;
nrtrwatrg[0]= 0;
};
for bar = 50 downto 0 {
if trend >= 0 then {
if Close[bar] > price then price = Close[bar];
value = price * (1 - WATR);
if Close[bar] < value then {
price = Close[bar];
value = price * (1 + WATR);
trend = -1;
};
}
else
if trend <= 0 then {
if Close[bar] < price then price = Close[bar];
value = price * (1 + WATR);
if Close[bar] > value then {
price = Close[bar];
value = price * (1 - WATR);
trend = 1;
};
};
if trend = -1 then {
nrtrwatrr[bar]= value;
nrtrwatrg[bar]= 0;
};
if trend = 1 then {
nrtrwatrg[bar]= value;
nrtrwatrr[bar]= 0;
};
};
//----------------------------------------------------------------------------------------------------
AvgRange3=0;
for i=1 To AveragePeriod {
AvgRange3=AvgRange3 + Abs(High[i]-Low[i]);
};
dK2 = AvgRange3/AveragePeriod;
if Close[0] > Open[0] then {
value30 = Close[0] * (1 - dK2);
trend2 = 1;
nrtrg[0]= value30;
nrtrr[0]=0;
};
if Close[0] < Open[0] then {
value30 = Close[0] * (1 + dK2);
trend2 = -1;
nrtrr[0]=value30;
nrtrg[0]=0;
};
for bar = 50 downto 0 {
if trend2 >= 0 then {
if Close[bar] > price2 then price2 = Close[bar];
value30 = price2 * (1 - dK2);
if Close[bar] < value30 then {
price2 = Close[bar];
value30 = price2 * (1 + dK2);
trend2 = -1;
};
}
else
if trend2 <= 0 then {
if Close[bar] < price2 then price2 = Close[bar];
value30 = price2 * (1 + dK2);
if Close[bar] > value30 then {
price2 = Close[bar];
value30 = price2 * (1 - dK2);
trend2 = 1;
};
};
if trend2 = -1 then {
nrtrr[bar]= value30;
nrtrg[bar]= 0;
};
if trend2 = 1 then {
nrtrg[bar]= value30;
nrtrr[bar]= 0;
};
};
//----------------------------------------------------------------------------------------------------
for shift=30 downto 0 Begin
Counter=0;
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=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=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;
value3=0;
If value2=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;
val2=0;
};
};
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]0 and ascsigsell[0]>0 then
{
sigvalsell=Period;
Timecntbuy=0;
sigvalbuy=0;
};
if ascsigbuy[1]>0 and ascsigsell[0]>0 then {
Timecntbuy=0;
sigvalbuy=0;
if timecntsell!=Minute then
{
SigValsell=sigvalsell+1;
timecntsell=Minute;
};
};
if ascsigbuy[1]>0 and ascsigbuy[0]>0 then
{
sigvalbuy=Period;
Timecntsell=0;
sigvalsell=0;
};
if ascsigsell[1]>0 and ascsigbuy[0]>0 then
{
Timecntsell=0;
sigvalsell=0;
if timecntbuy!=Minute then
{
SigValbuy=Sigvalbuy+1;
timecntbuy=Minute;
};
};
//----------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
comment("ascbuy: ",ascsigbuy[0]," ","buysigval: ",sigvalbuy,"\n",
"ascsell: ",ascsigsell[0]," ","sellsigval: ",sigvalsell,"\n",
"nrtrwatrg[0]: ",nrtrwatrg[0]," ","nrtrg[0]: ",nrtrg[0],"\n",
"nrtrwatrg[1]: ",nrtrwatrg[1]," ","nrtrg[1]: ",nrtrg[1],"\n",
"nrtrwatrr[0]: ",nrtrwatrr[0]," ","nrtrr[0]: ",nrtrr[0],"\n",
"nrtrwatrr[1]: ",nrtrwatrr[1]," ","nrtrr[1]: ",nrtrr[1],"\n",
"wprfast: ",wprfast," ","wprslow :",wprslow,"\n",
"Range: ",Normalize(range/point,0));
//----------------------------------------------------------------------------------------------------------
TradesOnSymbol=0;
for cnt1=1 to TotalTrades
{
if (OrderValue(cnt1,VAL_TYPE)=OP_SELLSTOP or OrderValue(cnt1,VAL_TYPE)=OP_BUYSTOP or
OrderValue(cnt1,VAL_TYPE)=OP_SELLLIMIT or OrderValue(cnt1,VAL_TYPE)=OP_BUYLIMIT or
OrderValue(cnt1,VAL_TYPE)=OP_BUY or OrderValue(cnt1,VAL_TYPE)=OP_SELL) and
OrderValue(cnt1,VAL_SYMBOL)=Symbol then TradesOnSymbol=TradesOnSymbol+1;
};
If TradesOnSymbol=0 then begin
//BuySetup-----------------------------------------------------------------------------------------------
if ascsigbuy[0]<>0 then {
if wprfast>0 then {
if wprslow>=0 then {
if rangex1 and sigvalbuy>sigvalmin then {
if nrtrwatrg[0]>0 or ask>nrtrwatrr[0] then {
if nrtrwatrg[1]=0 then sl =ascsigbuy[0] else sl = nrtrwatrg[1];
SetOrder(OP_BUYSTOP,lots,ask+EntryStopLevel*point,Slippage,sl,ask+EntryStopLevel*point+TakeProfit*Point,lime);
vartime=TimeHour(time);
exit;
};
};
};
};
};
//SellSetup-----------------------------------------------------------------------------------
if ascsigsell[0]<>0 then {
if wprfast<0 then {
if wprslow<=0 then {
if rangesigvalmin then {
if nrtrwatrr[0]>0 or bid0 then {
if wprfast>0 then {
if ord(i,VAL_TYPE)=OP_SELLSTOP then {
deleteorder(ord(i,VAL_TICKET),red);
exit;
};
if ord(i,VAL_TYPE)=OP_SELL then {
CloseOrder(ord(i,VAL_TICKET),ord(i,VAL_LOTS),bid,slippage,red);
exit;
};
};
};
if ascsigsell[0]<>0 then {
if wprfast<0 then {
if ord(i,VAL_TYPE)=OP_BUYSTOP then {
DeleteOrder(ord(i,VAL_TICKET),lime);
exit;
};
if ord(i,VAL_TYPE)=OP_BUY then {
CloseOrder(ord(i,VAL_TICKET),ord(i,VAL_LOTS),ask,slippage,lime);
exit;
};
};
};
If ord(i,VAL_TYPE)=OP_BUYSTOP then
{
if timehour(time)!= vartime then
{
if high[2]>high[1] then
{
ModifyOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_OPENPRICE)-(high[2]-high[1]),
OrderValue(i,VAL_STOPLOSS),OrderValue(i,VAL_TAKEPROFIT),Red);
vartime=TimeHour(time);
};
};
};
If ord(i,VAL_TYPE)=OP_SELLSTOP then
{
if timehour(time)!= Vartime then
{
if Low[2]nrtrwatrr[1] then
{
ModifyOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_OPENPRICE),
nrtrwatrr[1],OrderValue(i,VAL_TAKEPROFIT),Red);
};
};
If ord(i,VAL_TYPE)=OP_BUY then
{
If (Bid-OrderValue(i,VAL_OPENPRICE))>(Point*TSLevel1) and (Bid-OrderValue(i,VAL_OPENPRICE))<(Point*TSLevel2) then
{
if OrderValue(i,VAL_STOPLOSS)(Point*TSLevel1) and (OrderValue(i,VAL_OPENPRICE)-Ask)<(Point*TSLevel2) then
{
If OrderValue(i,VAL_STOPLOSS)>nrtrwatrr[1] then
{
ModifyOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_OPENPRICE),
nrtrwatrr[1],OrderValue(i,VAL_TAKEPROFIT),Red);
};
};
};
If ord(i,VAL_TYPE)=OP_BUY then
{
If (Bid-OrderValue(i,VAL_OPENPRICE))>(Point*TSLevel2) then
{
if OrderValue(i,VAL_STOPLOSS)=(Point*TSLevel2) then
{
If OrderValue(i,VAL_STOPLOSS)>nrtrr[1] then
{
ModifyOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_OPENPRICE),
nrtrr[1],OrderValue(i,VAL_TAKEPROFIT),Red);
};
};
};
};
};
end;
Code to difficult? Find somebody to help you with coding here.
Author: Jens Daniel
Source: www.xeatrade.com
all systems for MetaTrader
all systems
|