Jak otwierać tylko jedną pozycję na danej parze?

O jezykach programowania w platformach i nie tylko.
psk89
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 21 cze 2016, 07:39

Jak otwierać tylko jedną pozycję na danej parze?

Nieprzeczytany post autor: psk89 » 21 lut 2019, 15:39

Witam,

Staram się zrobić EA, które otwierałoby tylko jedną pozycję na danej parze.
Miałem taki plan aby to uzyskać poprzez stosowanie różnych Magic Number na każdym instrumencie ale coś mi tu nie gra.
W rezultacie kodu, który zamieszczam poniżej automat otwiera cały czas pozycję :(

Proszę o jakiekolwiek wskazówki lub fragment kodu, który załatwiałby to założenia.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                  mojeRenkoEA.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int MagicznyNumer = 696969;
extern bool AutoTrade = false;

enum RT { BUY = 1, SELL = 2};
extern RT Typ_Pozycji = BUY;
extern double Wielkosc_Pozycji = 0.01;

int start()
{


for( int i = 0 ; i < OrdersTotal() ; i++ ) {
   if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false ) {
      Print("ERROR - Unable to select the order - ",GetLastError());
      break;
   } 
   
   if(OrderMagicNumber()!=MagicznyNumer){
   
   if( Close[1] > Close[2] || Close[1]<Close[2]){
   OrderSend (Symbol(), OP_BUY, Wielkosc_Pozycji, Ask, 0, Open[1], 0, "BUY", MagicznyNumer, 0, CLR_NONE);
   Print("Numer zlecenia to: " +OrderMagicNumber());
   
   }
   
   
   }
}

return(0);
}

Awatar użytkownika
xhDog
Pasjonat
Pasjonat
Posty: 944
Rejestracja: 05 cze 2014, 18:25

Re: Jak otwierać tylko jedną pozycję na danej parze?

Nieprzeczytany post autor: xhDog » 22 lut 2019, 17:25

Zamiast magicnumber, spróbuj z OrderSymbol() i Symbol():
https://docs.mql4.com/trading/ordersymbol
https://docs.mql4.com/chart_operations/symbolwindow

np.

Kod: Zaznacz cały

bool orderExist = false;

for(int i = 0; i < OrdersTotal(); i++)
	{
		if(OrderSelect(i, SELECT_BY_POS) == true)
			{
				if(OrderSymbol() == Symbol())
					{
						orderExist = true;
					}
			}
    }
	
if(orderExist == false)
	{
		if( Close[1] > Close[2] || Close[1]<Close[2])
			{
				OrderSend (Symbol(), OP_BUY, Wielkosc_Pozycji, Ask, 0, Open[1], 0, "BUY",
                                                 MagicznyNumer, 0, CLR_NONE);
				Print("Numer zlecenia to: " +OrderMagicNumber());
			}
	}
trzeba mieć jaja jak super saiyan

Daniel 12:12 Blessed is he that waiteth, and cometh to the thousand three hundred and five and thirty days.

psk89
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 21 cze 2016, 07:39

Re: Jak otwierać tylko jedną pozycję na danej parze?

Nieprzeczytany post autor: psk89 » 23 lut 2019, 18:41

Dzięki za odpowiedź.
Udało mi się osiągnąć ten cel zostawiając ten magic number ale generalnie jest to praktycznie to samo co podałeś. Pozdrawiam

Kod: Zaznacz cały

int start()
{
total= OrdersTotal();


for( int i = 0 ; i < total ; i++ ) {
   if( OrderSelect( i, SELECT_BY_POS)==true) 
   {
   
   if( OrderMagicNumber() == MagicznyNumer)
   {
   znacznik = false;
   ticket=OrderTicket();
   }else znacznik = true;
      
   }   
}

if(znacznik && AutoTrade)// tutaj wrzuć strategię
{

//OrderSend (Symbol(), OP_BUY, Wielkosc_Pozycji, Ask, 0, Open[1], 0, "BUY", MagicznyNumer, 0, CLR_NONE);// w tym miejscu wrzucę jutro cały algorytm strategii
if(Typ_Pozycji == BUY && Close[1] > Close[2] && Close[2] < Close[3])kup();
if(Typ_Pozycji == SELL && Close[1] < Close[2] && Close[2] > Close[3])sprzedaj();



}


if(OrdersTotal()==0)znacznik=true;

if(Close[1]<Close[2])zamknijBUY(); // zautomatyczne zamykanie pozycji BUY i SELL
if(Close[1]>Close[2])zamknijSELL();


return(0);
}

ODPOWIEDZ