Standardowe podwajanie - przykład kodu, wynik i wykres

O jezykach programowania w platformach i nie tylko.
jumper
Bywalec
Bywalec
Posty: 15
Rejestracja: 05 sty 2011, 12:24

Standardowe podwajanie - przykład kodu, wynik i wykres

Nieprzeczytany post autor: jumper »

Cześć,

Opis prostego algorytmu podwajającego stawkę ujemnych zakładów - kasyno na przykładzie rynku CCI.

http://fivewithfour.blogspot.com/

pozdrawiam

sonictune
Gaduła
Gaduła
Posty: 144
Rejestracja: 16 lut 2009, 18:27

Nieprzeczytany post autor: sonictune »

Ehhh... Myślisz , że pierwszy wpadłeś na to :?:
A jak to wygląda w realu :?:
Co się stanie jeżeli consecutive losses dojdzie do 5 czy 10 :?:
No i czemu takie krótkie testy 1-mc :?: Chyba nie zakładasz na wstępie szybkiej kariery :roll:
Nec hercules contra plures .

jumper
Bywalec
Bywalec
Posty: 15
Rejestracja: 05 sty 2011, 12:24

Nieprzeczytany post autor: jumper »

Oczywiście, że nie pierwszy.
Nie gram - jestem programistą i o grze nie wiele wiem - jest to przykład dla programistów (taki profil bloga) zaczynających programować w API MT4.
Faktycznie wątek powinien być w dziale programowanie - sorry

pozdrawiam

sonictune
Gaduła
Gaduła
Posty: 144
Rejestracja: 16 lut 2009, 18:27

Nieprzeczytany post autor: sonictune »

Nec hercules contra plures .

jumper
Bywalec
Bywalec
Posty: 15
Rejestracja: 05 sty 2011, 12:24

Nieprzeczytany post autor: jumper »

Błędy logiczne popełniane przez grających nie są błędami logicznymi programistów - moim zadaniem było oprogramowanie koncepcji wymyślonej przez hazardzistę, a nie prostowanie logiki osoby uzależnionej i przekonanej o swoim "geniuszu".
Jeśli chodzi o okres wykorzystany w przykładzie to jest to najdłuższy ciągły okres danych jakimi dysponuje.
Gdybym grał poczuł bym smak błędnej logiki na własnej skórze, ale prezentowane rozwiązanie pomysłu jest poprawne.

pozdrawiam

sonictune
Gaduła
Gaduła
Posty: 144
Rejestracja: 16 lut 2009, 18:27

Nieprzeczytany post autor: sonictune »

jumper pisze:moim zadaniem było oprogramowanie koncepcji wymyślonej przez hazardzistę
Okej okej , błędnie zdiagnozowałem przypadek :wink: Chodzi mi tylko o to , że zrzuty z ekranu wyglądają jak przedwyborcze obietnice , a świętego graala jak nie było tak nima .

Pozdrawiam
Nec hercules contra plures .

jumper
Bywalec
Bywalec
Posty: 15
Rejestracja: 05 sty 2011, 12:24

Nieprzeczytany post autor: jumper »

Trudno się nie zgodzić z podstawami logiki.
Szukanie świętego grala pozostawiam grającym - ale gdyby wyciśnięcie z niego kasy wymagało pracy programisty to polecam swoje usługi.
Na wszelki wypadek podpinam kod algorytmu, który wygenerował wykresy z tego posta http://fivewithfour.blogspot.com/2011/0 ... ld-ii.html

Kod: Zaznacz cały

#property copyright "http://FiveWithFour.blogspot.com"
#property link      "http://FiveWithFour.blogspot.com"

// parametry podstawowe sterujące algorytmem

double   dFirstLots = 0.1;             // stawka początkowa
int      iSlippage = 1;
double   dTakeProfitBUY = 5;           // skok po jakim zamknąć z zyskiem - BUY 
double   dLostProfitBUY = 5;           // skok po jakim podwoić stawkę - BUY
double   dTakeProfitSELL = 5;          // skok po jakim zamknąć z zyskiem - SELL
double   dLostProfitSELL = 5;          // skok po jakim podwoić stawkę - SELL

string   sSymbol = "GOLD";

// parametry sterujące zwiększonym ryzykiem

bool     bDoubleDanger = true;         // ryzyko (true = włączone / false = wyłączone)
double   dTakeProfitDOUBLEBUY = 15;    // skok po jakim zamknąć z zyskiem - BUY
double   dLostProfitDOUBLEBUY = 45;    // skok po jakim zamknąć ze stratą - BUY
double   dTakeProfitDOUBLESELL = 15;   // skok po jakim zamknąć z zyskiem - SELL
double   dLostProfitDOUBLESELL = 45;   // skok po jakim zamknąć ze stratą - SELL
int      iDoubleLots = 8;              // skok po jakim algorytm zaczyna kompensować straty podwajając zakład przeciwny
   
// funkcja uruchamiająca działanie   
   
int init()
{
   OrderSend(sSymbol, OP_BUY, dFirstLots, Ask , iSlippage, 0, 0, "Casino", 11111, 0 , CLR_NONE);
   OrderSend(sSymbol, OP_SELL, dFirstLots, Bid , iSlippage, 0, 0, "Casino", 11111, 0 , CLR_NONE);
   return(0);
}

// funkcje algorytmu - uruchamiane przy zmianie ceny waloru

int iDoubleTicket;
bool bDouble = false;

int n = 0;

int start()
{
   int i=0;
   int iTicket;
   
   double dLots, dOpnPrice;
   //Print("RSI = ",iRSI(NULL,0,14,PRICE_CLOSE,0));
   while(OrderSelect(i,SELECT_BY_POS))
   {
      iTicket = OrderTicket(); // znacznik transakcji
      dLots = OrderLots();
      dOpnPrice = OrderOpenPrice();
      
      switch (OrderType())
         {
         case OP_SELL:
            {
            if (dOpnPrice <= (Ask - dLostProfitSELL) && (iTicket != iDoubleTicket) && (OrderMagicNumber() != 33333) && (OrderMagicNumber() != 44444))
               {
               if (dLots >= (dFirstLots*iDoubleLots) && ((bDouble == false) && (bDoubleDanger == true)))
                  {
                  iDoubleTicket = OrderSend(sSymbol, OP_BUY, dLots*2, Ask, iSlippage, NULL, NULL, "Casino_double", 22222, 0 , CLR_NONE);
                  bDouble = true;
                  }
               while ((OrderSend(sSymbol, OP_SELL, dLots*2, Bid , iSlippage, NULL, NULL, "Casino", 11111, 0 , CLR_NONE) < 0))
                  {
                  if (GetLastError() == 134) // brak funduszy na dalsze zakłady 
                     {
                     Print("G A M E  O V E R - L O O S E R  ! ! ! ");
                     break;
                     } 
                  RefreshRates();              
                  }
               while (!(OrderClose(iTicket, dLots, Ask, 1, CLR_NONE)))
                  {
                  }
               }
            if (dOpnPrice >= (Ask + dTakeProfitSELL) && (iTicket != iDoubleTicket)) // realizacja zysku z opcji OP_SELL i otwarcie nowej pozycji z podsawową wartością lot
               {
               while (!(OrderClose(iTicket, dLots, Ask, 1, CLR_NONE)))
                  {
                  RefreshRates();
                  }
               while ((OrderSend(sSymbol, OP_SELL, dFirstLots, Bid , iSlippage, NULL, NULL, "Casino", 11111,0 , CLR_NONE) < 0))
                  {
                  if (GetLastError() == 134)
                     {
                     Print("G A M E  O V E R - L O O S E R  ! ! ! ");   // brak funduszy na dalsze zakłady
                     break;
                     } 
                  RefreshRates();               
                  }                                    
               }
            break;
            }           
         case OP_BUY:
            {
            if (dOpnPrice >= (Bid + dLostProfitBUY) && (iTicket != iDoubleTicket) && (OrderMagicNumber() != 33333) && (OrderMagicNumber() != 44444))
               {   
               if (dLots >= (dFirstLots*iDoubleLots) && ((bDouble == false) && (bDoubleDanger == true)))
                  {
                  iDoubleTicket = OrderSend(sSymbol, OP_SELL, dLots*2, Bid, iSlippage, NULL, NULL, "Casino_double", 22222,0 , CLR_NONE);
                  bDouble = true;
                  }                        
               while ((OrderSend(sSymbol, OP_BUY, dLots*2, Ask, iSlippage, NULL, NULL, "Casino",11111, 0, CLR_NONE) < 0))
                  {                   
                  if (GetLastError() == 134) // brak funduszy na dalsze zakłady
                     {
                     Print("G A M E  O V E R - L O O S E R  ! ! ! ");
                     break;
                     }
                  RefreshRates();
                  }
               while (!(OrderClose(iTicket, dLots, Bid, 1, CLR_NONE)))
                  {
                  RefreshRates();
                  }      
               }
            if (dOpnPrice <= (Bid - dTakeProfitBUY) && (iTicket != iDoubleTicket)) // realizacja zysku z opcji OP_BUY i otwarcie nowej pozycji z podsawową wartością lot
               {
               while (!(OrderClose(iTicket, dLots, Bid, 1, CLR_NONE)))
                  {
                  RefreshRates();
                  }
               while ((OrderSend(sSymbol, OP_BUY, dFirstLots, Ask ,iSlippage, NULL, NULL, "Casino", 11111, 0, CLR_NONE) < 0))
                  {
                  if (GetLastError() == 134) // brak funduszy na dalsze zakłady
                     {
                     Print("G A M E  O V E R - L O O S E R  ! ! ! ");   // brak funduszy na dalsze zakłady
                     break;
                     }
                  }                  
               }               
            break;
            } 
      }    
      i++;
      if (bDoubleDanger == true)
         fnCloseDouble();
   }
   return(0);
}         

int fnCloseDouble()
{
   while(OrderSelect(n,SELECT_BY_POS))
      {
      if (OrderMagicNumber() == 22222)
         {
         switch (OrderType())
            {
            case OP_BUY:
               {
               if (OrderOpenPrice() <= Bid - dTakeProfitDOUBLEBUY)
                  {
                  RefreshRates(); 
                  OrderClose(OrderTicket(), OrderLots(), Bid, 1, CLR_NONE);
                  Print("DOUBLE profit: " + OrderProfit());
                  bDouble = false;
                  break;
                  }  
               if (OrderOpenPrice() >= Bid + dLostProfitDOUBLEBUY)
                  {
                  RefreshRates(); 
                  OrderClose(OrderTicket(), OrderLots(), Bid, 1, CLR_NONE);
                  Print("DOUBLE profit: " + OrderProfit());
                  bDouble = false;
                  break;
                  } 
               break;             
               }
            case OP_SELL:
               {
               if (OrderOpenPrice() >= Ask + dTakeProfitDOUBLESELL)
                  {
                  RefreshRates(); 
                  OrderClose(OrderTicket(), OrderLots(), Ask, 1, CLR_NONE);
                  Print("DOUBLE profit: " + OrderTicket());
                  bDouble = false;
                  break;
                  } 
               if (OrderOpenPrice() <= Ask - dLostProfitDOUBLESELL)
                  {
                  RefreshRates(); 
                  OrderClose(OrderTicket(), OrderLots(), Ask, 1, CLR_NONE);
                  Print("DOUBLE profit: " + OrderTicket());
                  bDouble = false;
                  break;
                  }                  
               }
               break;
            }
         }
      n++;   
      }
   n=0;
   return(0);
} 
pozdrawiam

Awatar użytkownika
<kerimb>
Pasjonat
Pasjonat
Posty: 1460
Rejestracja: 27 sie 2010, 08:01

Nieprzeczytany post autor: <kerimb> »

jumper
Nie wiem co to jest ... Być może było jakoś optymalizowane ale u mnie na DEMO na każdym TF wychodzi dokładniutko taki sam kwietek jak na załączonym obrazku ...
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

jumper
Bywalec
Bywalec
Posty: 15
Rejestracja: 05 sty 2011, 12:24

Nieprzeczytany post autor: jumper »

Cześć,

Aby grać strategią należy ją zrozumieć - a ta nie jest trudna.
Jeśli masz mały depozyt to raczej nie rzucaj się na częstę podbijanie stawek ze straconych pozycji - algorytm wyświetla odpowiedni komunikat dla zachłannych. Parametry można dowolnie skalować i należy dostosować je do własnych potrzeb i możliwości. Dla Twojego depozytu i okresu czasu ustawiłem go na takie parametry:



Obrazek

i otrzymałem taki wynik:

Obrazek



Jest to przykład programistyczny opisujący proste zadanie z logiki. Nie jest to strategia oparta na wskaźnikach, która przynosi zyski każdemu. Nie gram, jestem tylko programistą ale nie wierzę, że istnieje algorytm podejmujący zawsze prawidłowe decyzje niezależnie od depozytu i stawki.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony 07 sty 2011, 15:46 przez jumper, łącznie zmieniany 1 raz.

Awatar użytkownika
<kerimb>
Pasjonat
Pasjonat
Posty: 1460
Rejestracja: 27 sie 2010, 08:01

Nieprzeczytany post autor: <kerimb> »

<kerimb> pisze:Być może było jakoś optymalizowane
Jak widać chodzi właśnie o tą optymalizację ... Tylko powstaje pytanie: Czy będziesz wiedział do przodu jaki wartości zastosować przy ciągle zmieniającym się Rynku?

Osobiście wątpię ... Dlatego testy zawsze wychodzą pięknie do tyłu a nie do przodu ... itd ... itd ... Nie ma żadnej pewności, że to co działało w tył z takimi ustawieniami będzie działało z nimi do przodu ...

ODPOWIEDZ