Serwis Forex-nawigator.biz korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.
Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce. [Zamknij tą informację]

Dzisiaj jest 25 mar 2019, 01:24    



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

O jezykach programowania w platformach i nie tylko.
  • Autor
  • Wiadomość
Offline

psk89

Stały bywalec

Stały bywalec

  • Posty: 34
  • Rejestracja: 21 cze 2016, 06:39

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

Nieprzeczytany post21 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);
}
Offline
Awatar użytkownika

xhDog

Pasjonat

Pasjonat

  • Posty: 940
  • Rejestracja: 05 cze 2014, 17:25

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

Nieprzeczytany post22 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.
Offline

psk89

Stały bywalec

Stały bywalec

  • Posty: 34
  • Rejestracja: 21 cze 2016, 06:39

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

Nieprzeczytany post23 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);
}

Wróć do Programowanie

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości