Strategia nie dziala w "realu"

O jezykach programowania w platformach i nie tylko.
piotrekm060
Bywalec
Bywalec
Posty: 10
Rejestracja: 19 paź 2012, 17:54

Strategia nie dziala w "realu"

Nieprzeczytany post autor: piotrekm060 »

Witam, jestem tu nowy zaledwie pare dni, ale mam ogromny problem, otoz napisalem swoja pierwsza strategie (nie mialem stycznosci wczesniej z programowaniem) napisalem ja na podstawie roznych domyslow, wszystko pieknie dziala w testerze, a w "realu" nie chce moze ktos z obeznanych rzuci okiem co jest zle? Z gory przepraszam z to co zle :)

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                 NOWA PIOTREK.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+


extern double TakeProfit                  = 80;
extern double Lots                        = 0.01;
extern double TrailingStop                = 1;
extern double MACDOpenLevel               =10;
extern double MACDCloseLevel              =10;
extern double MA1TrendPeriod              = 24;
extern double MA2TrendPeriod              = 9;

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


   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
 {
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, Ma1Current, Ma1Previous;
   double Ma2Current, Ma2Previous;
   int cnt, ticket, total;
   

   if(Bars<100)
{
      Print("bars less than 100");
      return(0); 
}      


   if(TakeProfit<10)
{
      Print("TakeProfit less than 10");
      return(0);  
}

   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);        
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);      
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);    
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);   
   Ma1Current=iMA(NULL,0,MA1TrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);  
   Ma1Previous=iMA(NULL,0,MA1TrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);  
   Ma2Current=iMA(NULL,0,MA2TrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);   
   Ma2Previous=iMA(NULL,0,MA2TrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);  
   
  total=OrdersTotal();
     if(total<10) 
     
{

     if(AccountFreeMargin()<(1000*Lots))
{
        Print("We have no money. Free Margin = ", AccountFreeMargin());
     return(0);  
}
//---
     if(MacdCurrent<0 &&                               
        MacdCurrent>SignalCurrent &&                     
        MacdPrevious<SignalPrevious &&                   
        MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && 
        Ma1Current>Ma2Current)                           
{
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd NOWA PIOTREK",16384,0,Green);
     if(ticket>0)
{
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
}
 //---
      if(MacdCurrent>0 &&                             
         MacdCurrent<SignalCurrent &&                 
         MacdPrevious>SignalPrevious &&               
         MacdCurrent>(MACDOpenLevel*Point) &&         
         Ma1Current<Ma2Previous)           
{
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd NOWA PIOTREK",16384,0,Red);
      if(ticket>0)
{
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
      else Print("Error opening SELL order : ",GetLastError()); 
      return(0); 
}
      return(0);
}
//---
     for(cnt=0;cnt<total;cnt++)
{
        OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     if(OrderType()<=OP_SELL &&                        
        OrderSymbol()==Symbol())                      
     if(OrderStopLoss()<Ask-Point*TrailingStop)
{
     if(OrderType()==OP_BUY)                           
{
//---
     if(MacdCurrent>0 && 
        MacdCurrent<SignalCurrent && 
        MacdPrevious>SignalPrevious &&
        MacdCurrent>(MACDCloseLevel*Point)&&
        Ma2Current>Ma1Current)
{
        OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
     return(0); 
}
//---
      if(TrailingStop>0)  
{                 
      if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
      if(OrderStopLoss()<Bid-Point*TrailingStop)
{
         OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
      return(0);
}
}
}
}
//---
{
      if(MacdCurrent<0 && 
         MacdCurrent>SignalCurrent &&
         MacdPrevious<SignalPrevious && 
         MathAbs(MacdCurrent)>(MACDCloseLevel*Point) &&
         Ma1Current<Ma2Current)
{
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
      return(0); 
}            
//---
      if(TrailingStop>0)  
{                 
      if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
      if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
          OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
      return(0);
}

}
}
}
}
}

      return(0);
}
Ostatnio zmieniony 22 paź 2012, 14:48 przez piotrekm060, łącznie zmieniany 2 razy.

Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

Re: Strategia nie dziala w "realu"

Nieprzeczytany post autor: xpep »

a jaki broker? jakie bledy wywala? prawdopodobnie przez to ze odpalasz zlecenie z ustawionym sl i tp, a w stp tak sie nie da, musisz otworzyc bez po czym modyfikowac zlecenie

piotrekm060
Bywalec
Bywalec
Posty: 10
Rejestracja: 19 paź 2012, 17:54

Re: Strategia nie dziala w "realu"

Nieprzeczytany post autor: piotrekm060 »

broker Forexyard (usa) bledy mam takie "Error opening SELL order : 133" i "trading with experts is prohibited", nie doszedlem do SL i TP jeszcze ta strategie napisalem w 3 dni, bez uprzedniej znajomosci programowania, bylbym bardzo wdzieczny za rady :), dodam ze w testerze wszystko dzial bez zarzutu :(

Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

Re: Strategia nie dziala w "realu"

Nieprzeczytany post autor: xpep »

komunikat swiadczy ze nie mozna poprzez automat otwierac pozycji :D dziwne zmien brokera

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: Strategia nie dziala w "realu"

Nieprzeczytany post autor: Pierz Andrzej »

piotrekm060 to znaczy ze broker blokuje mozliwosc inwestycji przez EA i Skrypty
z poważaniem
Andrzej Pierz
FOREX-SERVICE

piotrekm060
Bywalec
Bywalec
Posty: 10
Rejestracja: 19 paź 2012, 17:54

Re: Strategia nie dziala w "realu"

Nieprzeczytany post autor: piotrekm060 »

hm, no to kij im w nos, jak trzeba zmienic to trzeba, a czy moglby ktos z kolegow/kolezanek sprawdzic moje EA, chcialbym jeszcze dodac STOP LOSS i TRAILING STOP tyle ze na te 3 dni co przy tym siedzialem, glowe mi rozsadza, moze ktos pomoze, co dodac i gdzie z malym wytlumaczeniem? :)

ps:jakies sugestie co do brokera?

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Re: Strategia nie dziala w "realu"

Nieprzeczytany post autor: JAREK67 »

ale if(total<10) ?
raczej chyba if(total<1) autor miał na myśli?

piotrekm060
Bywalec
Bywalec
Posty: 10
Rejestracja: 19 paź 2012, 17:54

Re: Strategia nie dziala w "realu"

Nieprzeczytany post autor: piotrekm060 »

pomoze ktos mi zdefiniowac (napisac) STOP LOSS do mojego EA?

-- Dodano: 23 paź 2012, 20:25 --
JAREK67 pisze:ale if(total<10) ?
raczej chyba if(total<1) autor miał na myśli?
if(total<10)
to tylko w celach testu :)

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Re: Strategia nie dziala w "realu"

Nieprzeczytany post autor: personov »

StopLoss wysarczy dodać do nawiasu OrderSend().
TakeProfit już masz, a StopLoss ma być w nawiasie przed TakeProfit, tam gdzie masz teraz 0.
Czyli najpierw zdefiniuj na początku kodu :
extern double StopLoss = 80;
Ale nawet wystarczy int zamiast double, bo masz tylko liczby całkowite.
I w nawiasach OrderSend :

Kod: Zaznacz cały

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"macd NOWA PIOTREK",16384,0,Green);
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"macd NOWA PIOTREK",16384,0,Red);
Solą życia jest kasa.

piotrekm060
Bywalec
Bywalec
Posty: 10
Rejestracja: 19 paź 2012, 17:54

Re: Strategia nie dziala w "realu"

Nieprzeczytany post autor: piotrekm060 »

personov pisze:StopLoss wysarczy dodać do nawiasu OrderSend().
TakeProfit już masz, a StopLoss ma być w nawiasie przed TakeProfit, tam gdzie masz teraz 0.
Czyli najpierw zdefiniuj na początku kodu :
extern double StopLoss = 80;
Ale nawet wystarczy int zamiast double, bo masz tylko liczby całkowite.
I w nawiasach OrderSend :

Kod: Zaznacz cały

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"macd NOWA PIOTREK",16384,0,Green);
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"macd NOWA PIOTREK",16384,0,Red);
dzieki za dobre checi ale nie dziala, ale wiem dlaczego :) i uznaje to za pomylke z "pośpiechu"...:)


zamiast:

Kod: Zaznacz cały

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"macd NOWA PIOTREK",16384,0,Red);
ma być:

Kod: Zaznacz cały

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"macd NOWA PIOTREK",16384,0,Red);

i zamiast:

Kod: Zaznacz cały

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"macd NOWA PIOTREK",16384,0,Green);
ma być:

Kod: Zaznacz cały

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"macd NOWA PIOTREK",16384,0,Green)
ah te plusy i minusy :)
dzieki wielkie!!!

-- Dodano: 24 paź 2012, 02:47 --

hm, jeszcze potrzebowalbym "wydłuzenia zysku" czyli przesuniecie "Trailing PROFIT"? :)

ODPOWIEDZ