Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Szymon_P
Stały bywalec
Stały bywalec
Posty: 60
Rejestracja: 31 paź 2015, 22:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Szymon_P »

Dzięki!!!
dziś miałem chwilę, żeby zmodyfikować kod i wygląda na to, że wszystko działa :D

Awatar użytkownika
sandramillerr
Bywalec
Bywalec
Posty: 15
Rejestracja: 19 paź 2021, 12:40

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: sandramillerr »

Wierzę również w przejmowanie kontroli nad moimi transakcjami od początku do początku. Nauczyłem się nawet kodować, bo szczerze mówiąc, nie ufam nikomu na rynku finansowym.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

sandramillerr pisze:
25 paź 2021, 13:53
Wierzę również w przejmowanie kontroli nad moimi transakcjami od początku do początku. Nauczyłem się nawet kodować, bo szczerze mówiąc, nie ufam nikomu na rynku finansowym.
A końca nie widać!

BOT! :569:
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Szymon_P
Stały bywalec
Stały bywalec
Posty: 60
Rejestracja: 31 paź 2015, 22:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Szymon_P »

Witam,
w jaki sposób można stworzyć takie menu (extern ENUM_TIMEFRAMES timeFrame = PERIOD_M1;) tyle, że dla własnych wartości? np. Robot1, Robot2, Robot3, Robot4 itd.
xxx.png
Dokładnie to chcę to wykorzystać do czegoś takiego:
if(wybor==Robot1)
{zadanie1}
if(wybor==Robot2)
{zadanie2}
if(wybor==Robot3)
{zadanie3}
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Szymon_P pisze:
30 paź 2021, 13:45
Witam,
w jaki sposób można stworzyć takie menu (extern ENUM_TIMEFRAMES timeFrame = PERIOD_M1;) tyle, że dla własnych wartości? np. Robot1, Robot2, Robot3, Robot4 itd.
xxx.png
Dokładnie to chcę to wykorzystać do czegoś takiego:
if(wybor==Robot1)
{zadanie1}
if(wybor==Robot2)
{zadanie2}
if(wybor==Robot3)
{zadanie3}

Kod: Zaznacz cały


  
enum ENUM_ROBOT
  {
   Robot1,     
   Robot2,   
   Robot3,   
   Robot4,
  };
  
input ENUM_ROBOT            Which_Robot = Robot1;
Jeżeli chcesz nadać inne opisy, widoczne potem w menu, to tak:

Kod: Zaznacz cały

  
enum ENUM_ROBOT
  {
   Robot1,    // Kupuj na BO
   Robot2,    // Sprzedawaj na BO
   Robot3,    // Kupuj po retescie
   Robot4,    // Sprzedawaj po retescie
  };
  
input ENUM_ROBOT            Which_Robot = Robot1;
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

grzegrzyw
Gaduła
Gaduła
Posty: 334
Rejestracja: 11 mar 2012, 19:43

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: grzegrzyw »

Chciałbym uzyskać ticket ostatniej otwartej pozycji, nie wiem co zrobiłem źle, kompiluje się poprawnie, ticketu nie pokazuje

Kod: Zaznacz cały

 void OstatniaPozycja() //Ticket ostatniej transakcji)
 {
   datetime CzasOstatniejPozycji = 0;

   for ( i=OrdersTotal()-1; i>=0; i--)
   {
     bool Z = OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
      if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
        {    if(OrderOpenTime() > CzasOstatniejPozycji)
          { 
           CzasOstatniejPozycji = OrderOpenTime();
           OstatniTick = OrderTicket();
          }     
        } 
   }
 }

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

grzegrzyw pisze:
09 lis 2021, 15:43
Chciałbym uzyskać ticket ostatniej otwartej pozycji, nie wiem co zrobiłem źle, kompiluje się poprawnie, ticketu nie pokazuje

Kod: Zaznacz cały

 void OstatniaPozycja() //Ticket ostatniej transakcji)
 {
   datetime CzasOstatniejPozycji = 0;

   for ( i=OrdersTotal()-1; i>=0; i--)
   {
     bool Z = OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
      if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
        {    if(OrderOpenTime() > CzasOstatniejPozycji)
          { 
           CzasOstatniejPozycji = OrderOpenTime();
           OstatniTick = OrderTicket();
          }     
        } 
   }
 }

Kod: Zaznacz cały

int LastOpenTicket(){
    datetime lastTime  = 0;
    int      lastTicket = -1; // None open.
    for(pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
        OrderSelect(pos, SELECT_BY_POS)                 // Only my orders w/
    &&  OrderMagicNumber()  == magic.number             // my magic number
    &&  OrderSymbol()       == Symbol()                 // and my pair.
    &&  OrderOpenTime()     >  lastTime
    ){
      lastTime   = OrderOpenTime();
      lastTicket = OrderTicket();
    }
    return(lastTicket);
}
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

grzegrzyw
Gaduła
Gaduła
Posty: 334
Rejestracja: 11 mar 2012, 19:43

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: grzegrzyw »

Dzięki Darek! Na Twoją pomoc w programowaniu zawsze można liczyć.

Szymon_P
Stały bywalec
Stały bywalec
Posty: 60
Rejestracja: 31 paź 2015, 22:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Szymon_P »

Witam,
napisałem funkcję do obliczania MAX zakresu. Jeśli w iBarShift oraz Highest zamieniam 0 na PERIOD_M1 to nie liczy mi prawidłowo. Zależy mi aby liczyło tylko dla m1 bez względu na to na jakim TF mam otwarty wykres.
Czasy przeliczam w ten sposób:
zmienne datetime oblicz mi prawidłowo:
dt=CurTime();
Time1=StrToTime(TimeToStr(dt,TIME_DATE)+" "+Czas1);
Time2=StrToTime(TimeToStr(dt,TIME_DATE)+" "+Czas2);


double ZakresMAX(datetime T1, datetime T2)
{
//Obliczenie MAX z zakresu T1/T2//
int iBarBegin =iBarShift(NULL,0,T1);
int iBarEnd =iBarShift(NULL,0,T2);
double PoziomMAX =High[Highest(NULL,0,MODE_HIGH,iBarBegin-iBarEnd+1,iBarEnd)];
return PoziomMAX;
}

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Szymon_P pisze:
22 lis 2021, 20:04
Witam,
napisałem funkcję do obliczania MAX zakresu. Jeśli w iBarShift oraz Highest zamieniam 0 na PERIOD_M1 to nie liczy mi prawidłowo. Zależy mi aby liczyło tylko dla m1 bez względu na to na jakim TF mam otwarty wykres.
Czasy przeliczam w ten sposób:
zmienne datetime oblicz mi prawidłowo:
dt=CurTime();
Time1=StrToTime(TimeToStr(dt,TIME_DATE)+" "+Czas1);
Time2=StrToTime(TimeToStr(dt,TIME_DATE)+" "+Czas2);


double ZakresMAX(datetime T1, datetime T2)
{
//Obliczenie MAX z zakresu T1/T2//
int iBarBegin =iBarShift(NULL,0,T1);
int iBarEnd =iBarShift(NULL,0,T2);
double PoziomMAX =High[Highest(NULL,0,MODE_HIGH,iBarBegin-iBarEnd+1,iBarEnd)];
return PoziomMAX;
}
Być może dlatego, że funkcja jest iHighest(), nie Highest()?
https://docs.mql4.com/series/ihighest
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

ODPOWIEDZ