Code:
/*[[
Name := High_Low v2 (ZigZag)
Author := Istoniz
Link := http://www.kg/
Separate Window := No
First Color := Blue
First Draw Type := Line
First Symbol := 217
Use Second Data := Yes
Second Color := White
Second Draw Type := Line
Second Symbol := 218
]]*/
Inputs : barn(250),LengthInput(6),delaymin(60);
Variable : shift(0),LL(0),HH(0),Swing(0),Swing_n(0),BH(0),BL(0),i(0),zu(0),zd(0),NH(0),NL(0),uzl(0), summ(0), current(0);
Variable : lasttime(0), file_handle(0);
Variable:Length(6);
Define: nSymbolHi(242), nSymbolLow(241);
Array: Uzel[10000,3](0);
SetLoopCount(0);
// loop from first bar to current bar (with shift=0)
Swing_n=0;Swing=0;uzl=0;
BH =High[barn];BL=Low[barn];zu=barn;zd=barn;
For shift= barn downto 0 Begin
LL=10000000;HH=-100000000;
for i=shift+Length downto shift+1 Begin
if Low[i]< LL then {LL=Low[i];};
if High[i]>HH then {HH=High[i];};
end;
if Low[shift]<LL and High[shift]>HH then
{
Swing=2;
if Swing_n=1 then {zu=shift+1;};
if Swing_n=-1 then {zd=shift+1;};
}
else
{
if Low[shift]<LL then {Swing=-1;};
if High[shift]>HH then {Swing=1;};
};
if Swing <> Swing_n and Swing_n<>0 then
{
if Swing=2 then {swing=-Swing_n;BH = High[shift];BL = Low[shift]; };
uzl=uzl+1;
if swing = 1 then {Uzel[uzl,1]=zd;Uzel[uzl,2]=BL;Uzel[uzl,3]=shift;};
if swing =- 1 then {Uzel[uzl,1]=zu;Uzel[uzl,2]=BH;Uzel[uzl,3]=shift;};
BH = High[shift];BL = Low[shift];
};
if swing = 1 then { if High[shift] >= BH then {BH=High[shift];zu=shift;};};
if swing = -1 then { if Low[shift]<=BL then {BL=Low[shift]; zd=shift;};};
Swing_n=Swing;
end;
for i =1 to uzl Begin
SetIndexValue(Uzel[i,1],Uzel[i,2]);
SetIndexValue2(Uzel[i,3],Uzel[i,2]);
if Uzel[i,2]-Uzel[i-1,2]<0 then
SetArrow(Time[Uzel[i,3]], min(Uzel[i,2], Low[Uzel[i,3]])-10*Point,nSymbolLow, Red);
if Uzel[i,2]-Uzel[i-1,2]>0 then
SetArrow(Time[Uzel[i,3]], max(Uzel[i,2], High[Uzel[i,3]])+20*Point, nSymbolHi, Red);
end ;
// eugene5 added something here
summ=0;
for i = 1 to uzl-1
Begin
if Uzel[i+1,2]-Uzel[i,2]>0 then
//it means that we must sell now (calculating profit using the previous buy
summ=summ+Close[Uzel[i+1,3]]-Close[Uzel[i,3]];
if Uzel[i+1,2]-Uzel[i,2]<0 then
//it means that we must buy now (calculating profit using the previous sell)
summ=summ-(Close[Uzel[i+1,3]]-Close[Uzel[i,3]]);
end;
Comment("Total profit in points=", summ/Point, " for the last ", barn, " bars, starting from ",
TimeToStr(Time[barn]), "\n",
"min/max for the bars ¹1-7=",LL,"/",HH, " swing/swing_n=", swing, "/", swing_n, "\n",
"BL/BH=",BL,"/",BH);
//if more than delaymin-mimutes - exit
//If CurTime < lasttime + delaymin*60 Then exit;
//lasttime = CurTime;
//FileDelete("report"+Symbol);
//file_handle = FileOpen("report"+Symbol," ");
summ=0;
for i = 1 to uzl-1
Begin
if Uzel[i+1,2]-Uzel[i,2]>0 then
//seems necessary to sell now (write in log using previous buy)
{
summ=summ+Close[Uzel[i+1,3]]-Close[Uzel[i,3]];
/* FileWrite(file_handle," buy at", TimeToStr(Time[Uzel[i,3]]), "on the price of", Close[Uzel[i,3]]);
FileWrite(file_handle,"close at", TimeToStr(Time[Uzel[i+1,3]]), "on the price of", Close[Uzel[i+1,3]]);
FileWrite(file_handle,"profit on this position=", (Close[Uzel[i+1,3]]-Close[Uzel[i,3]])/Point,
"Totally in points=", summ/Point);
*/ };
if Uzel[i+1,2]-Uzel[i,2]<0 then
//seems necessary to buy now (write in log using previous sell)
{
summ=summ-(Close[Uzel[i+1,3]]-Close[Uzel[i,3]]);
/* FileWrite(file_handle," sell at", TimeToStr(Time[Uzel[i,3]]), "on the price of", Close[Uzel[i,3]]);
FileWrite(file_handle,"close at", TimeToStr(Time[Uzel[i+1,3]]), "on the price of", Close[Uzel[i+1,3]]);
FileWrite(file_handle,"profit on this position=", -(Close[Uzel[i+1,3]]-Close[Uzel[i,3]])/Point,
"Totally in points=", summ/Point);
*/ };
end;
//FileClose(file_handle);