EA'm neden tekrar test yaparken negatif kar sağlamaya devam ediyor? - sayfa 5

 
deVries :


Metatrader İstasyonunuzdaki Hareketli Ortalama EA koduna bir göz atın ve orada nasıl yapıldığını görün ....


peki
 
deVries :

Şu anda, halihazırda bir ticaret açık olup olmadığını kontrol etmelisiniz.

bir ticaret açmadan önce bir ticaret açık olup olmadığını bilmek zorundasınız.

hala esnafın sayımını yaptığınızı göremiyorum

.

Metatrader İstasyonunuzdaki Hareketli Ortalama EA koduna bir göz atın ve orada nasıl yapıldığını görün ....


Birçok örnek okur ve kodlama stillerini taklit ederdim.

bu benim son kodum. ne yazık ki, hala olmaması gereken bir şekilde negatif kazanç sağlıyor.

//+------------------------------------------------------------------+
//|                                       RSI_strategy_cyxstudio.mq4 |
//|                                  Copyright 2013, Tjipke de Vries |
//|                                     https://forum.mql4.com/53695/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <stderror.mqh>
#include <stdlib.mqh>


extern int RSIPeriod        =  2;      //number of periods for RSI
extern double UpperBound    =  95;     //set upper bound value for RSI
extern double LowerBound    =  5;      //set lower bound value for RSI

extern double Lots  = 0.1;
extern double StopLoss      = 60;       //Set the stop loss level
extern double TakeProfit    = 120;       //Set the take profit level
extern double TrailingStop = 40;
//extra settings for OrderSend
extern int        MagicNumber = 54333;
extern string     CommentEA = "RSI strategy";
extern int        Slippage.Pips    = 10;



//---
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----   
  Alert(OrdersTotal());

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
RefreshRates();
   int Ticket1;
   int Ticket2;
   bool Ticket3;
   bool Ticket4;
   
   double SL,TP;
   int Total;
   double MagicNo;
   double Slippage;
    int cnt;
   
   double pAsk = MarketInfo(Symbol(), MODE_ASK);
   double pBid = MarketInfo(Symbol(), MODE_BID);
   double pAskPrev = iClose(Symbol(),0,1);
   double pBidPrev = iClose(Symbol(),0,1);
   double pAskLast = iClose(Symbol(),0,2);
   double pBidLast = iClose(Symbol(),0,2);
   double MA200 = iMA(NULL, 1440, 200, 0,MODE_SMA,PRICE_CLOSE, 0);  //200 day Moving Average   
   double MA5 = iMA(NULL, 1440, 5, 0,MODE_SMA,PRICE_CLOSE, 0);      //  5 day Moving Average
   double CurrentRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,0);
   double PrevRSI =  iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,1);
   double LastRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,2);
   
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   
   if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }



//Check for open orders if there are none then check for conditions to open one

      if ((OrdersTotal() ==0) && (LastRSI > PrevRSI) && (PrevRSI > CurrentRSI) && (CurrentRSI < LowerBound) && (pAsk > MA200) && (pAsk < pAskPrev) && (pAskPrev < pAskLast)) {    //Condition to execute buy entry
  
        Ticket1 = OrderSend(Symbol(), OP_BUY, Lots, pAsk, Slippage.Pips, pBid - ( StopLoss * Point ), pBid + ( TakeProfit * Point ), "Buy.", MagicNumber,0,Yellow);       //execute buy order
   
    if(Ticket1>0)
           {
            if(OrderSelect(Ticket1,SELECT_BY_TICKET,MODE_TRADES)) 
               Print("BUY order opened : ",OrderOpenPrice());
            
           }
         if (Ticket1 < 0) {
         Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
   }  
   }
  

  if ((OrdersTotal() ==0) && (LastRSI < PrevRSI) && (PrevRSI < CurrentRSI) && (CurrentRSI > UpperBound) && (pBid < MA200)) {     //Condition to execute sell entry
  
       Ticket2 = OrderSend(Symbol(), OP_SELL, Lots, pBid, Slippage.Pips, pAsk + ( StopLoss * Point ), pAsk - ( TakeProfit * Point ), "Sell.",MagicNumber, 0, Yellow)  ;     //execute sell order
       if(Ticket2>0)
           {
            if(OrderSelect(Ticket2,SELECT_BY_TICKET,MODE_TRADES)) 
               Print("SELL order opened : ",OrderOpenPrice());
           
           }
         if (Ticket2<0) {
          Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
   } 
      
      
 


   
    int ticket=OrderTicket();
    double lots=OrderLots();
   
   
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
   
      if (OrderSelect(i, SELECT_BY_POS))
      {
      if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber) ) {


         if (OrderType() == OP_BUY && pBid > MA5 && (pBid > pBidPrev) && (pBidPrev > pBidLast))
         {
          Ticket3 = OrderClose(ticket, lots, pBid, Slippage.Pips);
          
          if (Ticket3 == true ) {
          Print("BUY position closed", OrderClosePrice());
          }
          if (Ticket3 == false) {
          Print("Error closing BUY position", ErrorDescription(GetLastError()));
          }
          }
      }
   }
   }
   
   
   for (int m = OrdersTotal() - 1; m >= 0; m--)
   {
   
      if (OrderSelect(m, SELECT_BY_POS))
      {
      if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber)) {


    if (OrderType() == OP_SELL && pAsk < MA5)
          {
          Ticket4 = OrderClose(ticket, lots, pAsk, Slippage.Pips);
           if (Ticket4 == true ) {
          Print("SELL position closed", OrderClosePrice());
          }
          if (Ticket4 == false) {
          Print("Error closing SELL position", ErrorDescription(GetLastError()));
          }
    }
       }
   }
   }
   
        
        
           return(0);
}

Lütfen bana doğrudan hangi kısmın yanlış olduğunu söyler misiniz?

 

ben de bunu denedim

 //+------------------------------------------------------------------+
//|                                       RSI_strategy_cyxstudio.mq4 |
//|                                  Copyright 2013, Tjipke de Vries |
//|                                     https://forum.mql4.com/53695/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"
#include <stderror.mqh>
#include <stdlib.mqh>

extern int maxTrades = 1 ;
extern int RSIPeriod        =   2 ;       //number of periods for RSI
extern double UpperBound    =   95 ;     //set upper bound value for RSI
extern double LowerBound    =   5 ;       //set lower bound value for RSI

extern double Lots  = 0.1 ;
extern double StopLoss      = 60 ;       //Set the stop loss level
extern double TakeProfit    = 120 ;       //Set the take profit level
extern double TrailingStop = 40 ;
//extra settings for OrderSend
extern int         MagicNumber = 54333 ;
extern string      CommentEA = "RSI strategy" ;
extern int         Slippage.Pips    = 10 ;



//---
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----   


//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
RefreshRates();
   int Ticket1;
   int Ticket2;
   bool Ticket3;
   bool Ticket4;
   
   double SL,TP;

   double MagicNo;
   double Slippage;
  
   
   double pAsk = MarketInfo( Symbol (), MODE_ASK);
   double pBid = MarketInfo( Symbol (), MODE_BID);
   double pAskPrev = iClose( Symbol (), 0 , 1 );
   double pBidPrev = iClose( Symbol (), 0 , 1 );
   double pAskLast = iClose( Symbol (), 0 , 2 );
   double pBidLast = iClose( Symbol (), 0 , 2 );
   double MA200 = iMA ( NULL , 1440 , 200 , 0 , MODE_SMA , PRICE_CLOSE , 0 );   //200 day Moving Average   
   double MA5 = iMA ( NULL , 1440 , 5 , 0 , MODE_SMA , PRICE_CLOSE , 0 );       //  5 day Moving Average
   double CurrentRSI = iRSI ( NULL , 0 , RSIPeriod, PRICE_CLOSE , 0 );
   double PrevRSI =   iRSI ( NULL , 0 , RSIPeriod, PRICE_CLOSE , 1 );
   double LastRSI = iRSI ( NULL , 0 , RSIPeriod, PRICE_CLOSE , 2 );
   
   if ( Bars < 100 )
     {
       Print ( "bars less than 100" );
       return ( 0 );  
     }
   
   if (AccountFreeMargin()<( 1000 *Lots))
        {
         Print ( "We have no money. Free Margin = " , AccountFreeMargin());
         return ( 0 );  
        }



//Check for open orders if there are none then check for conditions to open one
int ticket;
   int total=CheckOpenTrade(MagicNumber, Symbol ());
   
   if (total<maxTrades)
   {
       if ((LastRSI > PrevRSI) && (PrevRSI > CurrentRSI) && (CurrentRSI < LowerBound) && (pAsk > MA200) && (pAsk < pAskPrev) && (pAskPrev < pAskLast)) {     //Condition to execute buy entry
  
        Ticket1 = OrderSend ( Symbol (), OP_BUY, Lots, pAsk, Slippage.Pips, pBid - ( StopLoss * Point ), pBid + ( TakeProfit * Point ), "Buy." , MagicNumber, 0 ,Yellow);       //execute buy order
   
     if (Ticket1> 0 )
           {
             if ( OrderSelect (Ticket1,SELECT_BY_TICKET,MODE_TRADES)) 
               Print ( "BUY order opened : " ,OrderOpenPrice());
            
           }
         if (Ticket1 < 0 ) {
         Print ( "Error opening BUY order : " , GetLastError ()); 
         return ( 0 ); 
   }  
   }
  

   if (( OrdersTotal () == 0 ) && (LastRSI < PrevRSI) && (PrevRSI < CurrentRSI) && (CurrentRSI > UpperBound) && (pBid < MA200)) {     //Condition to execute sell entry
  
       Ticket2 = OrderSend ( Symbol (), OP_SELL, Lots, pBid, Slippage.Pips, pAsk + ( StopLoss * Point ), pAsk - ( TakeProfit * Point ), "Sell." ,MagicNumber, 0 , Yellow)  ;     //execute sell order
       if (Ticket2> 0 )
           {
             if ( OrderSelect (Ticket2,SELECT_BY_TICKET,MODE_TRADES)) 
               Print ( "SELL order opened : " ,OrderOpenPrice());
           
           }
         if (Ticket2< 0 ) {
           Print ( "Error opening SELL order : " , GetLastError ()); 
         return ( 0 ); 
        }
   } 
     } 
      
 
double lots=OrderLots();

total=CheckOpenTrade(MagicNumber, Symbol ());
   for ( int cnt=total- 1 ;cnt>= 0 ;cnt--)
    {
       OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
       if (   OrderType()<=OP_SELL                       // check for opened position 
         && OrderSymbol()== Symbol ()                   // check for symbol
         && OrderMagicNumber() == MagicNumber)         // my magic number
      {



         if (OrderType() == OP_BUY && pBid > MA5 && (pBid > pBidPrev) && (pBidPrev > pBidLast))
         {
          Ticket3 = OrderClose(ticket, lots, pBid, Slippage.Pips);
          
           if (Ticket3 == true ) {
           Print ( "BUY position closed" , OrderClosePrice());
          }
           if (Ticket3 == false ) {
           Print ( "Error closing BUY position" , ErrorDescription( GetLastError ()));
          }
          }

     if (OrderType() == OP_SELL && pAsk < MA5)
          {
          Ticket4 = OrderClose(ticket, lots, pAsk, Slippage.Pips);
           if (Ticket4 == true ) {
           Print ( "SELL position closed" , OrderClosePrice());
          }
           if (Ticket4 == false ) {
           Print ( "Error closing SELL position" , ErrorDescription( GetLastError ()));
          }
    }
}
}
   
   

   
   
   
   
   
   
        
        
           return ( 0 );
}


int CheckOpenTrade( int iMN, string sOrderSymbol)
{
   int icnt, itotal, retval;
 
   retval= 0 ;
   itotal= OrdersTotal ();
 
       for (icnt=itotal- 1 ;icnt>= 0 ;icnt--) // for loop
      {
         OrderSelect (icnt, SELECT_BY_POS, MODE_TRADES);
         // check for opened position, symbol & MagicNumber
         if (OrderSymbol()== sOrderSymbol)
         {
             if (OrderMagicNumber()==iMN) 
               retval++;             
         } // sOrderSymbol
      } // for loop
 
   return (retval);
}
 
cyxstudio :


Birçok örnek okur ve kodlama stillerini taklit ederdim.

bu benim son kodum. ne yazık ki, hala olmaması gereken bir şekilde negatif kazanç sağlıyor.

Lütfen bana doğrudan hangi kısmın yanlış olduğunu söyler misiniz?

Neyin yanlış olduğunu söyledim, yeterince açık değil miydim??

sana verdiğim kodda değişiklik yaptın

o kısımda yaptığın değişiklikler tamamen yanlış ve daha önce nerede yanlış olduğunu yazmıştım...

 //+------------------------------------------------------------------+
//|                                       RSI_strategy_cyxstudio.mq4 |
//|                                  Copyright 2013, Tjipke de Vries |
//|                                     https://forum.mql4.com/53695/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"


extern int RSIPeriod        =   3 ;       //number of periods for RSI
extern double UpperBound    =   90 ;     //set upper bound value for RSI
extern double LowerBound    =   5 ;       //set lower bound value for RSI
extern int MASlowPeriod     = 200 ;
extern int MAFastPeriod     = 5 ;
extern double Lots  = 0.1 ;
extern double StopLoss      = 60 ;       //Set the stop loss level
extern double TakeProfit    = 120 ;       //Set the take profit level
extern double TrailingStop = 40 ;
//extra settings for OrderSend
extern int         MagicNumber = 54333 ;
extern string      CommentEA = "RSI strategy" ;
extern int         Slippage.Pips    = 3 ;


int     BUYS= 1 ,SELLS= 1 ;
//++++ These are adjusted for 5 digit brokers.
int      pips2points;       // slippage  3 pips    3=points    30=points
double   pips2dbl;         // Stoploss 15 pips    0.015      0.0150
int      Digits .pips;       // DoubleToStr(dbl/pips2dbl, Digits.pips)
//---
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----   
   if ( Digits % 2 == 1 )   // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
     {pips2dbl = Point * 10 ; pips2points = 10 ;   Digits .pips = 1 ;}
     else {pips2dbl = Point ;    pips2points =   1 ;   Digits .pips = 0 ;}
     // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl        
//----      

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int Ticket;
   double SL,TP;
   int Total;
   
   double pAsk = MarketInfo( Symbol (), MODE_ASK);
   double pBid = MarketInfo( Symbol (), MODE_BID);
   double MA200 = iMA ( NULL , 1440 , MASlowPeriod, 0 , MODE_SMA , PRICE_CLOSE , 0 );   //200 day Moving Average   
   double MA5 = iMA ( NULL , 1440 , MAFastPeriod, 0 , MODE_SMA , PRICE_CLOSE , 0 );       //  5 day Moving Average
   double CurrentRSI = iRSI ( NULL , 1440 , RSIPeriod, PRICE_CLOSE , 0 );
   
   
   if ( Bars < 100 )
     {
       Print ( "bars less than 100" );
       return ( 0 );  
     }
   
   if (AccountFreeMargin()<( 1000 *Lots))
        {
         Print ( "We have no money. Free Margin = " , AccountFreeMargin());
         return ( 0 );  
        }


   if ( OrdersTotal ()< 1 )
        {
         BUYS= 0 ;
         SELLS= 0 ;
        } 


   if (BUYS> 0 ||SELLS> 0 )    //condition start   LOOP FOR CHECKING TRADES THIS EA                     
    {
     BUYS= 0 ;
     SELLS= 0 ;             //RESET VALUES TO ZERO BEFORE START COUNTING
     for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i--) 
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false )         break ;
       if (OrderMagicNumber()!=MagicNumber || OrderSymbol()!= Symbol ()) continue ;
       //.
       //.
       //---- check order type
       if (OrderType()==OP_BUY)  // <==  IMPORTANT FUNCTION TO KNOW WHAT KIND OF TRADE IS SELECTED
        {
         BUYS++;           //COUNT BUY TRADES
         //.
         if (pAsk > MA5) {OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage.Pips*pips2points,White);}
        }
 
       if (OrderType()==OP_SELL)
        {
         SELLS++;           //COUNT SELL TRADES
         //.
         if (pBid < MA5) {OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage.Pips*pips2points,White);}
        }
     }
    }

// MAKE PART FOR OPENING BUY TRADE             
..........          

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

Daha sonra vereceğim döngünün içinde daha fazlası var

Döngüden sonra alım satım açma bölümünü yapın...

 // MAKE PART FOR OPENING BUY TRADE           

4/5 haneli brokerler için çalışmalı ve ECN hesapları için çalışmalıdır

.

.

.

.

görmek isterim

Sahip olduğunuz bu orijinal kodu değiştiriyorsunuz

     if (CurrentRSI < LowerBound && MarketInfo( Symbol (), MODE_ASK) > MA200 ) 
       {     //Condition to execute buy entry
        Ticket = OrderSend ( Symbol (), OP_BUY, BuyVolume, Ask, 3 , Bid - ( StopLoss * Point ), Ask + ( TakeProfit * Point ), "Buy." , 111 , 0 ,Yellow)   ;       //execute buy order
   
         if (Ticket> 0 )
           {
             if ( OrderSelect (Ticket,SELECT_BY_TICKET,MODE_TRADES)) 
               Print ( "BUY order opened : " ,OrderOpenPrice());
           }
         if (Ticket < 0 ) 
           {
             Print ( "Error opening BUY order : " , GetLastError ()); 
             return ( 0 ); 
           }
         return ( 0 );
        }

4/5 haneli brokerler için çalışması ve ECN hesapları için çalışması gerekir.