IB EA - kod do poprawki

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
Jacek_fx
Stały bywalec
Stały bywalec
Posty: 74
Rejestracja: 18 lis 2007, 11:23

IB EA - kod do poprawki

Nieprzeczytany post autor: Jacek_fx »

Witam
Mój pierwszy robot. Mam problem z dodaniem funkcji ograniczającej 1 transakcje na świeczkę, kod się kompiluje, EA otwiera pozycje jednak mogą być jakieś tam drobne błędy - w końcu dopiero zaczynam.
Założenie jest takie, że muszą być minimum dwie świeczki (może być więcej) wewnątrz tej głównej.
Proszę o dopisanie tej funkcji ograniczającej jedną transakcję na bar (bo teraz to otwiera tyle ile razy cena przechodzi przez ten poziom) + MM, jeśli to nie będzie duży problem
Pozdrawiam :wink:

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                InsideBars EA.mq4 |
//|                      Copyright ˆ 2010, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ˆ 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double  Lots = 0.1;
extern int 	   mm = 0;
extern double  RiskReward=1.5;
extern int		StopLoss = 0;
extern int	 	TakeProfit = 0;
extern int	  	MagicNumber=0;
extern int     shift=1;


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

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
  
  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double digits=MarketInfo(Symbol(),MODE_DIGITS);
double spread=MarketInfo(Symbol(),MODE_SPREAD);


double   BuyValue=0, SellValue=0;
BuyValue=0; SellValue=0;

double         BuyPrice=0, SellPrice=0;
BuyPrice=0; SellPrice=0;

double Buy_StopLoss=0, Buy_TakeProfit=0;
Buy_StopLoss=0; Buy_TakeProfit=0;

double Sell_StopLoss=0, Sell_TakeProfit=0;
Sell_StopLoss=0; Sell_TakeProfit=0;

double BarHeight=0;


if (
	
	((High[shift+1]<High[shift+2] && Low[shift+1]>Low[shift+2])
	&& (High[shift]<High[shift+2] && Low[shift]>Low[shift+2])))
	
	
 {	
      BuyPrice=High[shift+2];
      SellPrice=Low[shift+2];
		if (Bid==BuyPrice){
		    BuyValue=1;
		    BarHeight=BuyPrice-SellPrice;
		    Buy_StopLoss=SellPrice-spread*Point;
		    Buy_TakeProfit=BuyPrice+BarHeight*RiskReward;
		 } 
		 else if (Bid==SellPrice){
		     SellValue=1;
		     BarHeight=BuyPrice-SellPrice;
		     Sell_StopLoss=BuyPrice+spread*Point;
		     Sell_TakeProfit=SellPrice-BarHeight*RiskReward;
		 }
		 }

double buy_sl=NormalizeDouble(Buy_StopLoss, digits);
double buy_tp=NormalizeDouble(Buy_TakeProfit, digits);
double sell_sl=NormalizeDouble(Sell_StopLoss, digits);
double sell_tp=NormalizeDouble(Sell_TakeProfit, digits);		


if (BuyValue>0) {
      OrderSend(Symbol(),OP_BUY,Lots,Ask,0,buy_sl,buy_tp,0,0);
      }
		 
if (SellValue>0) {
      OrderSend(Symbol(),OP_SELL,Lots,Bid,0,sell_sl,sell_tp,0,0);
      }		 

   return(0);
  }
//+------------------------------------------------------------------+
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Kod: Zaznacz cały

static datetime czasTranzakcji;

//przed wykonanie tranakcji
if(czasTranzakcji!=Time[1])
{
// transakcja
///...

// po zajęciu transakcji
czasTranzakcji=Time[1];
}

Ostatnio zmieniony 09 gru 2010, 23:39 przez Tig3r, łącznie zmieniany 1 raz.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
Jacek_fx
Stały bywalec
Stały bywalec
Posty: 74
Rejestracja: 18 lis 2007, 11:23

Nieprzeczytany post autor: Jacek_fx »

Dzięki Tygrysie ;)
z początku kod nie chciał się skompilować, kilka literówek - brakuje "i"
zmieniłem także static date czasTranzakcji na static datetime czasTranzakcji
Nie wiem czy dobrze ale działa ;)

Pozdrawiam

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Fakt, popawilem dla potomnych
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
Jacek_fx
Stały bywalec
Stały bywalec
Posty: 74
Rejestracja: 18 lis 2007, 11:23

Nieprzeczytany post autor: Jacek_fx »

Witam

Udało mi się stworzyć EA, działa dobrze jednak jest z nim jeszcze kilka problemów
Zrobiłem test na E/U za 2010 rok, na domyślnych ustawieniach, przy Reward/Risk=1,5 35% transakcji zyskownych, 65% transakcji stratnych, z czego:

- 16% są to transakcje "wycięte" przez pinbar, który przebija poziom SL o kilka pips, następnie cena leci na TP (rys. poniżej)
RADA:zwiększyć poziom SL np. dwukrotnie i dodać warunek, że jak świeczka zamknie się powyżej (poniżej) aktualnego poziomu SL'a a następna przekroczy jej poziom High (dla eLek Low) to EA zamyka pozycje poprzez OrderClose, ten zwiększony poziom StopLossa ma być tylko tak dla bezpieczeństwa, na wypadek gwałtownego skoku ceny

- 13% są to transakcje, gdzie cena zawróciła kilka pips przed TP i zakończyła się na SL. Wyrażenie "przed TP" oznacza że cena od otwarcia pokonała min odległość (na +) równą wielkości SL'a
RADA: dodanie funkcji Breakeven. Jest już dodana taka funkcja, ale tak samo jak w przypadku SL wymaga modyfikacji na tzw. "ukryty poziom BE" czyli jak świeczka zamknie się powyżej poziomu otwarcia, a następna przekroczy jej poziom High/Low o kilka pipsów EA zamyka poprzez OrderClose, gdyż cena lubi często przetestować poziom z którego było wybicie

- pozostałe 36% stratnych można uznać za straty które są na FX nieuniknione, bądź też bawić się w dodatkowe filtry


Niestety nie jestem narazie tak zaawansowany w kodowaniu, więc proszę Was o pomoc przy modyfikacji. Oczywiście wszelkie sugestie mile widziane.

Po tych modyfikacjach za ten rok EA miałoby 51% transakcji zyskownych, 36% stratnych, co przy Reward/Risk=1.5 daje zarobić (13% to BE)

Pozdrawiam
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

ODPOWIEDZ