Help me fix my EA so that it trades once per signal when it hit either SL, TP or trailing stop. I want it to wait for next signal - page 2

Oliver Gideon Amofa Appiah
64478
Marco's method:

After testing I realized that it still does not do what I actually want. It misses some signals and also open more than one trade between signals.
Oliver Gideon Amofa Appiah
64478
Hello Tony,
Can you please insert your idea into the code and let us see if it works? 
I got to learn this 
Ahmet Metin Yilmaz
9539
Oliver Gideon Amofa Appiah:
Hello Tony,
Can you please insert your idea into the code and let us see if it works? 
I got to learn this 

your logic about buy or sell condition wrong

you need to find crossing stoch

Ahmet Metin Yilmaz
9539
Ahmet Metin Yilmaz:

your logic about buy or sell condition wrong

you need to find crossing stoch

or you should try Tony's way

both will be ok 

Ahmet Metin Yilmaz
9539
Marco vd Heijden:

You have 8 market products and a forex website.

Why are you not able to solve it ?

And I agree with Marco :)

Oliver Gideon Amofa Appiah
64478
My first time in the forum, it's great here! 
I like how quickly someone responded to my post. 

However, sometimes you think you know the easy solution or fix but until you get down to it,  to actually do it, you don't solve anything. 

The actual thing I wanted fixed remain the same. I tried the suggestions but ended up not what I really wanted. 

Thank you guys all the same for your help. 
The EA is for educational purposes only. It's not profitable. I was trying to use that to learn something here. 
Marco vd Heijden
Moderator
13595

If that happens it will be because your params are causing a very fast ob/os/ob situations or they are the result of a failed ordersend.

Marco vd Heijden
Moderator
13595
Oliver Gideon Amofa Appiah:

The EA keeps opening trades when current one is closed by either SL, TP or Trailing Stop, because conditions remain valid. 
I want help to make EA trade only once per signal. It should wait for next signal before opening trade when the current trade is closed; even if trade conditions remain valid.

Please find the source code and insert for me if possible. 

Thank you

If you mean you want to wait for the next signal you will have to pull your trade flag high and after the order is opened you will have to pull it low again.

Then, when the order is closed, you have to pull the trade flag high again.

Like this:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright " "
#property link      " "
#property description   "Stochastic EA"
#property version   "1.0"
#property strict

extern int MagicNumber=10001;
extern double Lots=0.1;
extern double StopLoss=50;
extern double TakeProfit=100;
extern int TrailingStop=30;
extern int Slippage=3;

bool Trade=1;// Trade Flag
//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+

int start()
  {

   if(TotalOrdersCount()==0)// all orders closed ?
     {
      Trade=1; // new orders allowed
     }

   double MyPoint=Point;
   if(Digits==3 || Digits==5) MyPoint=Point*10;

   double TheStopLoss=0;
   double TheTakeProfit=0;
   if(TotalOrdersCount()==0)
     {
      int result=0;
      if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)>iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) // Here is your open buy rule
        {
         if(Trade==1) // new order allowed ?
           {
            result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Stoch EA",MagicNumber,0,Blue);
            if(result>0)
              {
               TheStopLoss=0;
               TheTakeProfit=0;
               if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
               if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
               OrderSelect(result,SELECT_BY_TICKET);
               OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
               Trade=0;// No more new orders allowed from now
              }
            return(0);
           }
        }
      if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)<iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) // Here is your open Sell rule
        {
         if(Trade==1)// new order allowed ?
           {
            result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Stoch EA",MagicNumber,0,Red);
            if(result>0)
              {
               TheStopLoss=0;
               TheTakeProfit=0;
               if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
               if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
               OrderSelect(result,SELECT_BY_TICKET);
               OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
               Trade=0; // no more new orders allowed
              }
            return(0);
           }
        }
     }

   for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL && 
         OrderSymbol()==Symbol() && 
         OrderMagicNumber()==MagicNumber
         )
        {
         if(OrderType()==OP_BUY)
           {
            if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)<iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) //here is your close buy rule
              {
               OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
              }
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else
           {
            if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)>iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) // here is your close sell rule
              {
               OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);
              }
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int TotalOrdersCount()
  {
   int result=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber()==MagicNumber) result++;

     }
   return (result);
  }
//+------------------------------------------------------------------+
Tonny Obare
155471
Tonny Obare  
Marco vd Heijden:

If you mean you want to wait for the next signal you will have to pull your trade flag high and after the order is opened you will have to pull it low again.

Then, when the order is closed, you have to pull the trade flag high again.

Like this:

Using orderstotal() might block other trades if he wants many trades and not just one at a time.

Marco vd Heijden
Moderator
13595
Tonny Obare:

Using orderstotal() might block other trades if he wants many trades and not just one at a time.

He wants:

Oliver Gideon Amofa Appiah:

 
I want help to make EA trade only once per signal. It should wait for next signal before opening trade when the current trade is closed; even if trade conditions remain valid.

Thank you


And i didn't use OrdersTotal().