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




A końca nie widać!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.


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;
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;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();
          }     
        } 
   }
 }

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

Być może dlatego, że funkcja jest iHighest(), nie Highest()?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;
}