/*[[ 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); 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.04.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 { SetOrder(OP_BUYSTOP,lots,ask+EntryStopLevel*point,Slippage,nrtrwatrg[1],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](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;