Script goes insane :D

 

Dear Everyone!


i wrote a little script (only to test if EA would've worked or not in the past) which SHOULD do the following:

on HOURLY frame (any chart is okay but i tested it mainly on EURUSD) the script calculate from 522 candles and at every candle opens a long trade which has a tp and sl same size which is the average candles size of the last 522 candle multiply with 10. then it calculates how many would be pozitive and how many would be negativ and gives back a rate! (for example from the last 522 candles 300 would go poz 200 would go neg and the last 22 wouldn't go anywhere YET so the rate is 300/(300+200)=60%) so after i got the RATE the script open a trade when the rate is over/below the border (75%-25%) and turns back (last candle 78% this candle 77% so it turned back and over border, same otherwise last candle 22% this candle 23% under border and turned back)

so thats it roughly

the problem is that it ONLY stops and order when it closed in TP so i can see how much it goes against and when i put a new part in the code to exit a trade if goes to other side of border (it opened in 78% tp didnt go but rate goes down to 25%) the code goes insane! i mean i just put in a special SL but now the code open trades different times! but i didnt put in other open signal only exit signal

int MonthSize=522;
double Multiplier=10;
double Border=0.75;

double Pip=0;
double Pips=0;
double KickBack=0;
double TempKickBack=0;
double TempAv=0;
double RateNow=0;
double RateBefore=0;
int NumberOfTrades=0;
double Converter=0;
double KickBackRate=0;
double NumOfCandlesAv=0;

void OnStart()
{
   if(StringCompare(StringSubstr(Symbol(),3,3),"JPY")==0)
   {
      Converter=100;
   }
   else
   {
      Converter=10000;
   }
   RateBefore=Rate(Bars-2*MonthSize-1);
   for(int i=Bars-2*MonthSize-2;i>0;i--)
   {
      TempKickBack=0;
      TempAv=0;
      RateNow=Rate(i);
      if(RateNow>Border && RateNow<RateBefore)
      {
         TempAv=Average(i);
         for(int j=i;j>0;j--)
         {
            if((Open[i]-TempAv*Multiplier)>Low[j])
            {
               Pip=TempAv*Multiplier;
               Pips+=Pip;
               NumberOfTrades++;
               Print(NumberOfTrades," ",TimeYear(Time[i]),".",TimeMonth(Time[i]),".",TimeDay(Time[i])," ",TimeHour(Time[i]),"   ",TimeYear(Time[j]),".",TimeMonth(Time[j]),".",TimeDay(Time[j])," ",TimeHour(Time[j])," Profit:",NormalizeDouble(Pip*Converter,1)," KickBack:",NormalizeDouble(TempKickBack*Converter,1)," RateNow:",NormalizeDouble(RateNow*100,2)," RateBefore:",NormalizeDouble(RateBefore*100,2),"% NumOfCandles:",i-j);
               NumOfCandlesAv+=i-j;
               i=j;
               RateNow=Rate(i);
               if(TempKickBack/(TempAv*Multiplier)>KickBackRate)
               {
                  KickBackRate=TempKickBack/(TempAv*Multiplier);
               }
               if(KickBack<TempKickBack)
               {
                  KickBack=TempKickBack;
               }
               break;
            }
            /*if(Rate(j)<(1-Border))
            {
               Pip=Open[i]-Open[j];
               Pips+=Pip;
               NumberOfTrades++;
               Print(NumberOfTrades," ",TimeYear(Time[i]),".",TimeMonth(Time[i]),".",TimeDay(Time[i])," ",TimeHour(Time[i]),"   ",TimeYear(Time[j]),".",TimeMonth(Time[j]),".",TimeDay(Time[j])," ",TimeHour(Time[j])," Profit:",NormalizeDouble(Pip*Converter,1)," KickBack:",NormalizeDouble(TempKickBack*Converter,1)," RateNow:",NormalizeDouble(RateNow*100,2)," RateBefore:",NormalizeDouble(RateBefore*100,2),"% NumOfCandles:",i-j);
               NumOfCandlesAv+=i-j;
               i=j;
               RateNow=Rate(i);
               if(TempKickBack/(TempAv*Multiplier)>KickBackRate)
               {
                  KickBackRate=TempKickBack/(TempAv*Multiplier);
               }
               if(KickBack<TempKickBack)
               {
                  KickBack=TempKickBack;
               }
               break;
            }*/
            if((High[j]-Open[i])>TempKickBack)
            {
               TempKickBack=(High[j]-Open[i]);
            }
         }
      }
      if(RateNow<(1-Border) && RateNow>RateBefore)
      {
         TempAv=Average(i);
         for(int l=i;l>0;l--)
         {
            if((Open[i]+TempAv*Multiplier)<High[l])
            {
               Pip=TempAv*Multiplier;
               Pips+=Pip;
               NumberOfTrades++;
               Print(NumberOfTrades," ",TimeYear(Time[i]),".",TimeMonth(Time[i]),".",TimeDay(Time[i])," ",TimeHour(Time[i]),"   ",TimeYear(Time[l]),".",TimeMonth(Time[l]),".",TimeDay(Time[l])," ",TimeHour(Time[l])," Profit:",NormalizeDouble(Pip*Converter,1)," KickBack:",NormalizeDouble(TempKickBack*Converter,1)," RateNow:",NormalizeDouble(RateNow*100,2)," RateBefore:",NormalizeDouble(RateBefore*100,2),"% NumOfCandles:",i-l);
               NumOfCandlesAv+=i-l;
               i=l;
               RateNow=Rate(i);
               if(TempKickBack/(TempAv*Multiplier)>KickBackRate)
               {
                  KickBackRate=TempKickBack/(TempAv*Multiplier);
               }
               if(KickBack<TempKickBack)
               {
                  KickBack=TempKickBack;
               }
               break;
            }
            /*if(Rate(l)>Border)
            {
               Pip=Open[l]-Open[i];
               Pips+=Pip;
               NumberOfTrades++;
               Print(NumberOfTrades," ",TimeYear(Time[i]),".",TimeMonth(Time[i]),".",TimeDay(Time[i])," ",TimeHour(Time[i]),"   ",TimeYear(Time[l]),".",TimeMonth(Time[l]),".",TimeDay(Time[l])," ",TimeHour(Time[l])," Profit:",NormalizeDouble(Pip*Converter,1)," KickBack:",NormalizeDouble(TempKickBack*Converter,1)," RateNow:",NormalizeDouble(RateNow*100,2)," RateBefore:",NormalizeDouble(RateBefore*100,2),"% NumOfCandles:",i-l);
               NumOfCandlesAv+=i-l;
               i=l;
               RateNow=Rate(i);
               if(TempKickBack/(TempAv*Multiplier)>KickBackRate)
               {
                  KickBackRate=TempKickBack/(TempAv*Multiplier);
               }
               if(KickBack<TempKickBack)
               {
                  KickBack=TempKickBack;
               }
               break;
            }*/
            if((Open[i]-Low[l])>TempKickBack)
            {
               TempKickBack=(Open[i]-Low[l]);
            }
         }
      }
      RateBefore=RateNow;
   }
   KickBackRate/=20;
   NumOfCandlesAv/=NumberOfTrades;
   Print("NumOfTrades:",NumberOfTrades," Total Profit:",NormalizeDouble(Pips*Converter,1)," Biggest KickBack:",NormalizeDouble(KickBack*Converter,1)," KickBackRate:",NormalizeDouble(KickBackRate*100,1),"% NumOfCandlesAv:",(int)NumOfCandlesAv);
}

double Rate(int i)
{
   double poz=0;
   double neg=0;
   double average=0;
   for(int c=i+MonthSize;c>i;c--)
   {
      average=Average(c);
      for(int x=c;x>i;x--)
      {
         if((Open[c]+average*Multiplier)<High[x])
         {
            poz++;
            break;
         }
         if((Open[c]-average*Multiplier)>Low[x])
         {
            neg++;
            break;
         }
      }
   }
   return poz/(poz+neg);
}

double Average(int i)
{
   double temp=0;
   for(int c=i+MonthSize;c>i;c--)
   {
      temp+=MathAbs(Open[c]-Close[c]);
   }
   return temp/(double)MonthSize;
}

please help me because i dont see the reason why the script changes the open of the signals when i "activate" the parts which i commented out

if u have any question regarding the code feel free to ask anything i will answer ASAP

Onarius

Reason: