Walstreet.lv
Jaunākais forumāPalīdzībaLietošanas noteikumiReģistrācijaAizmirsu paroliLogin
Forumu saraksts/Valūtas tirgi/Martingeila stratēģija
 
Inguss
Inguss
Pievienots: 18.02.2005
Ziņojumi: 154
Martingeila stratēģija
31.08.2007 19:13
Komentēšu sākumā kas tā tāda ir! Neveiksmīga rezultāta gadījumā tiek atvērta jauna pozīcija, kura ir 2x lielāka par iepriekšējo un katra nākamā pozīcija tiek dubultota, ja iepriekšējā noslēgusies ar Stop. Dubultošana notiekas tik ilgi, kamēr tiek sasniegts vēlamais līmenis(TakeProfit) un atkal tiek tirgots ar sākotnējoi lotu! Šāda tipa stratēģijas manuprāt jaliek tirgoties uz micro lotiem(0.01), var ari uz mini lotiem, bet nu tad depozītam jabūt samērā lielam. Signāli uz Buy vai Sell dod jebkurš indikators!. Man ir "eksperts" kurš tirgo pec MA signāliem, bet... testējot uz vēstures datiem, notiek situācijas, kad dubultošanās notiek līdz pat 10 pakāpēm (0.1-0.2-0.4-0.8-1.6-3.2-6.4-12.8-25.6-51.2) un tad experts pārstāj tirgošanos, jo nespēj atvērt pozīciju kas lielāka par 100 lotiem!

Šo topiku izveidoju lai apspriestu šāda veida stratēģijas un rast kādas iespējas, dēļ kurām izveidot pelnošu stratēģiju! Man tagad top experts, kurš vērs vaļā pozīcijas pēc <A href="ZeroLag'>http://codebase.mql4.com/ru/714">ZeroLag MACD</A> indikatora! Dubultošana notiks līdz piektai pakāpei, un ja tad vēl pozīcija nebūs aizvērusies pēc TakeProfit, tad experts atgriezīsies uz sākotnējo lotu.

Lūgšu padomus, vienkāršus komentārus un kritiku par un ap šo lietu! Ja kāds jau ir saskāries ar šo lietu, varbūt padalieties iespaidos!
Inguss
Inguss
Pievienots: 18.02.2005
Ziņojumi: 154
Re: Martingeila stratēģija
31.08.2007 19:15
Ievadīju topikā html koda daļu, domāju ka sanāks forumam pārveidot, bet izskatās ka nesanāca! Tātad ZeroLag MACD indikators rodams šajā saitē: http://codebase.mql4.com/ru/714
Hermanis
Pievienots: 27.08.2005
Ziņojumi: 5538
Re: Martingeila stratēģija
31.08.2007 20:06
Tad jau kazino izdevīgāk, liec tikai uz sarkano, nav jāmaksā komisija. Tamdēļ arī kazino noteikumos ir miņēts, ja nemaldos, ka likmi nedrīkst dubultot cik tur reizes pēc kārtas.
Inguss
Inguss
Pievienots: 18.02.2005
Ziņojumi: 154
Re: Martingeila stratēģija
31.08.2007 20:35
Hermani, nu tad jau kazino nesanāks šis princips, ja reiz neļauj dubultot likmi, un kuram kazino īpašniekam vajadzīgi šādi spēlētāji? Izlidosi no kazino pirmajā spēlēšnas stundā, ja protams tik ilgi noturēsies smile Es pamēģināju kaut ko līdzīgu paspēlēt interneta naudas spēlēs "Melns un Balts"! Nekas nesanaaca, mani 7$, kurus iemainīju rubļos ātri nodega, nu bet tur tas likmju kāpums nebija diez ko adekvāts manām prasībām - 0.1-0.2-0.3-0.5-1-2-3-5-10-20-30-50-100-200 RUR. Ja likmes palielina 1-2-3 tad paliec mīnusā...tātad  ja esi ticis līdz 2 tad nākamam solim jābūt 5...lai veiksmes gadījumā nepaliktu mīnusā! Šādas vietas jau ir nodrošinājušās pret šādiem spēlmaņiem, tāpēc nekas nesanāks! Var mēģināt spēlēt spēļu automātos pēc šādas stratēģijas, bet kā lai uzzin cik lielam jābūt sākuma depozītam, lai būtu izaugsme? Kāds nevēlas patestēt dzīvajā? ;)

Tauta, varbūt kādam ir kas sakāms lai atrastu šajā lietā svēto grālu?
Inguss
Inguss
Pievienots: 18.02.2005
Ziņojumi: 154
Re: Martingeila stratēģija
01.09.2007 20:40
Pēc daudzkārtējiem testiem esmu sapratis ka, lai darbotos ar šo sistēmu expertam jādarbojas zem indikatora, kurš dod ne vairāk kā 7 zaudētas pozīcijas pēc kārtas! Tauta, varbūt kādam ir kāds indikators aizķēries, kurš dod šādus rezultātus? Vēl viena fiška kas ļauj samazināt risku...dubultošana notiek no trešā šoļa, respektiivi 1-1-2-4-8-utt
wildman
Pievienots: 17.02.2006
Ziņojumi: 26
Re: Martingeila stratēģija
01.09.2007 21:22
nezinu kā pie šādas stratēģijas iespējams mazināt risku, bet ienesīgumu vari daudzkāršot verot vaļā pozīcijas uz abām pusēm un dubultojot to, kura norauj SL. Sanāk, ka peļņu nesošs ir katrs darijums, līdz brīdim, kad depo ir par mazu lai vēlreiz dubultotos...tad gan irmati  
Darzenis
Pievienots: 27.11.2006
Ziņojumi: 19
Re: Martingeila stratēģija
01.09.2007 22:32
manuprāt, dubultošanu var pielietot tikai kopā ar vēl kaut kādu vairāk/mazāk veiksmīgu stratēģiju.
supayeah
supayeah
Pievienots: 18.07.2006
Ziņojumi: 43
Re: Martingeila stratēģija
02.09.2007 09:48
> Pēc daudzkārtējiem testiem esmu sapratis ka, lai darbotos ar šo sistēmu expertam jādarbojas zem indikatora, kurš dod ne vairāk kā 7 zaudētas pozīcijas pēc kārtas!

nee, citaadi jau mums buutu graals. laugh

Martingale teoreetiski ir pozitiivs expected payout, bet tikai tad, ja Tu speej dubultot bezgaliigi daudz reizhu, jo jebkuraa _reaalaa_ virknee ar "labs dariijums/suudiigs dariijums" kaut kaadaa briidii buus pietiekami daudzi "suudiigs dariijums" peec kaartas un Tu vairs nespeesi dubultot. Protams, ja vari garanteet, ka shaadas zaudeetu dariijumu seerijas notiek pietiekami reti, tad ar lielu varbuutiibu vari kljuut par miljardieri, peec tam par miljonaaru ;)
Inguss
Inguss
Pievienots: 18.02.2005
Ziņojumi: 154
Re: Martingeila stratēģija
03.09.2007 02:59
Pastāv cita versija! Ja mums ir pieejams indikators kura vidējais zaudējumu skaits pēc kārtas =5...tad jau var uzlikt šādam ekspertam MaxStep=5 Respektīvi ja eksperts uzprasās ka vajagot dubultot sesto reizi, tad viņš atgriežas pie sākotnējā lota! Tā kā šādu iespēju būtu maz, tad arī stratēģija būs pelnoša...Es izlikšu savu ekspertu, kursh darbojas pēc ZeroLag MACD indikatora! Patestējiet, varbūt kāds rod kādu risinājumu... Stratēģija pēc šī indikator nav pelnoša, tadeļ ja kadam nav slinkums un ir vēlēšanās, var iemontēt šajā ekspertā kādu citu indikatoru, varbūt ideja nemaz nav tik sūdīga... smile

Eksperta kods:

#property copyright "2007"
#property link     " www.wallstreet.lv "

#define major   1
#define minor   0

extern string _tmp1_ = " --- Параметры эксперта ---";
extern double Lots = 0.1;
extern bool DynamicLot = true;
extern int LotMaxSteps = 5;
extern int StopLoss = 10;
extern int TakeProfit = 13;
extern int Slippage = 3;
extern int Magic = 20070831;

extern string _tmp2_ = " --- Параметры индикатора ZeroLag MACD ---";
extern int ZLMACD.FastEMA = 12;
extern int ZLMACD.SlowEMA = 24;
extern int ZLMACD.SignalEMA = 9;
extern double ZLMACD.BuyLevel = 0.0001;
extern double ZLMACD.SellLevel = -0.0001;

extern string _tmp3_ = " --- Временные параметры ---";
extern bool UseNoTradePeriod = false;
extern string PeriodBegin = "14:30";
extern string PeriodEnd   = "16:30";

extern string _tmp4_ = " --- Параметры трейлинг-стопа ---";
extern bool UseTrailing = false;
extern int StartProfit = 30;
extern int TrailingStop = 13;

extern string _tmp5_ = " --- Цвета на чарте ---";
extern color clBuy = DodgerBlue;
extern color clSell = Crimson;
extern color clModify = Silver;
extern color clClose = Gold;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include <stdlib.mqh>
#include <stderror.mqh>

void init ()
{
}

void deinit()
{
}

void start()
{
  //-----
   
  if (UseTrailing) TrailPositions();
 
  //-----
 
  if (UseNoTradePeriod)
  {
    datetime tm0 = TimeCurrent();
    datetime tm1 = StrToTime(TimeToStr(tm0, TIME_DATE) + " " + PeriodBegin);
    datetime tm2 = StrToTime(TimeToStr(tm0, TIME_DATE) + " " + PeriodEnd);
 
    if (tm1 <= tm0 && tm0 <= tm2)
    {
      CloseOrders(OP_BUY);
      CloseOrders(OP_SELL);
      return;
    }
  }
 
  //-----
     
  if (OrdersCount0() > 0) return;

  //-----

  string ind_name = "ZeroLag_MACD";
  double ZLMACD1 = iCustom(NULL, 0, ind_name, ZLMACD.FastEMA, ZLMACD.SlowEMA, ZLMACD.SignalEMA, 0, 1);
  double ZLMACD2 = iCustom(NULL, 0, ind_name, ZLMACD.FastEMA, ZLMACD.SlowEMA, ZLMACD.SignalEMA, 0, 2);
 
  //-----
 
  int BuyCnt = 0;
  int SellCnt = 0;
 
  int cnt = OrdersTotal();
  for (int i=0; i < cnt; i++)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if (OrderSymbol() != Symbol()) continue;
    if (OrderMagicNumber() != Magic) continue;
   
    int type = OrderType();
    if (type == OP_BUY) BuyCnt++;
    if (type == OP_SELL) SellCnt++;
  } 

  if (BuyCnt+SellCnt > 0) return;

  //-----
     
  double price, sl, tp;

  if (ZLMACD1 > ZLMACD.BuyLevel && ZLMACD2 <= ZLMACD.BuyLevel)
  { 
    price = Ask;
 
    sl = 0;
    tp = 0;
    if (StopLoss > 0) sl = price - StopLoss*Point;
    if (TakeProfit > 0) tp = price + TakeProfit*Point;

    Buy(Symbol(), GetLots(), price, sl, tp, Magic);
    return;
  }

  if (ZLMACD1 < ZLMACD.SellLevel && ZLMACD2 >= ZLMACD.SellLevel)
  {
    price = Bid;
   
    sl = 0;
    tp = 0;
    if (StopLoss > 0) sl = price + StopLoss*Point;
    if (TakeProfit > 0) tp = price - TakeProfit*Point;

    Sell(Symbol(), GetLots(), price, sl, tp, Magic);
    return;
  }
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

double GetLots()
{
  if (!DynamicLot) return (Lots);

  double lot = Lots;
  int cnt = GetLastNegCnt(OP_BUY, OP_SELL);
  cnt = cnt % LotMaxSteps;

  if (cnt <= 1)
    lot = Lots;
  else
    lot = MathPow(2, cnt-1)*Lots;

  return (lot);
}

int GetLastNegCnt(int type1, int type2)
{
  int orders = 0;

  int cnt = OrdersHistoryTotal();
  for (int i=cnt-1; i >= 0; i--)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
    if (OrderSymbol() != Symbol()) continue;
    if (OrderMagicNumber() != Magic) continue;
   
    if (OrderType() == type1 || OrderType() == type2)
    {
      if (OrderProfit() >= 0) break;
      orders++;
    }
  }
 
  return (orders);
}

int CloseOrders(int type)

  int cnt = OrdersTotal();
  for (int i=cnt-1; i >= 0; i--)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if (OrderSymbol() != Symbol()) continue;
    if (OrderMagicNumber() != Magic) continue;
   
    if (OrderType() != type) continue;
   
    if (OrderType() == OP_BUY)
    {
      RefreshRates();
      CloseOrder(OrderTicket(), OrderLots(), Bid);
    }
    else if (OrderType() == OP_SELL)
    {
      RefreshRates();
      CloseOrder(OrderTicket(), OrderLots(), Ask);
    }   
  }
 
  int orders = 0;
  cnt = OrdersTotal();
  for (i = 0; i < cnt; i++)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if (OrderSymbol() != Symbol()) continue;
    if (OrderMagicNumber() != Magic) continue;
   
    if (OrderType() == type) orders++;
  }
 
  return (orders);
}

int OrdersCount0()
{
  int orders = 0;

  int cnt = OrdersTotal();
  for (int i=0; i<cnt; i++)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if (OrderSymbol() != Symbol()) continue;
    if (OrderMagicNumber() != Magic) continue;

    if (OrderOpenTime() >= Time[0]) orders++;
  }

  cnt = OrdersHistoryTotal();
  for (i=0; i<cnt; i++)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
    if (OrderSymbol() != Symbol()) continue;
    if (OrderMagicNumber() != Magic) continue;

    if (OrderOpenTime() >= Time[0]) orders++;
  }
 
  return (orders);
}

void TrailPositions()
{
  int cnt = OrdersTotal();

  for (int i=0; i<cnt; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;       
    if (OrderMagicNumber() != Magic) continue;

    if (OrderType() == OP_BUY)
    {
      if (Bid-OrderOpenPrice() > StartProfit*Point)
      {
        if (OrderStopLoss() < Bid-TrailingStop*Point) {
       
          OrderModify(OrderTicket(), OrderOpenPrice(), Bid-TrailingStop*Point, OrderTakeProfit(), 0, clModify);
        }
      }
    }

    if (OrderType() == OP_SELL)
    {
      if (OrderOpenPrice()-Ask > StartProfit*Point)
      {
        if (OrderStopLoss() > Ask+TrailingStop*Point || OrderStopLoss() == 0)
        {
          OrderModify(OrderTicket(), OrderOpenPrice(), Ask+TrailingStop*Point, OrderTakeProfit(), 0, clModify);
        }
      }
    }
  }
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

int SleepOk = 2000;
int SleepErr = 6000;

int Buy(string symbol, double lot, double price, double sl, double tp, int magic, string comment="")
{
  int dig = MarketInfo(symbol, MODE_DIGITS);

  price = NormalizeDouble(price, dig);
  sl = NormalizeDouble(sl, dig);
  tp = NormalizeDouble(tp, dig);
   
  string _lot = DoubleToStr(lot, 1);
  string _price = DoubleToStr(price, dig);
  string _sl = DoubleToStr(sl, dig);
  string _tp = DoubleToStr(tp, dig);

  Print("Buy \"", symbol, "\", ", _lot, ", ", _price, ", ", Slippage, ", ", _sl, ", ", _tp, ", ", magic, ", \"", comment, "\"");

  int res = OrderSend(symbol, OP_BUY, lot, price, Slippage, sl, tp, comment, magic, 0, clBuy);
  if (res >= 0) {
    Sleep(SleepOk);
    return (res);
  }    
      
  int code = GetLastError();
  Print("Error opening BUY order: ", ErrorDescription(code), " (", code, ")");
  Sleep(SleepErr);
   
  return (-1);
}

int Sell(string symbol, double lot, double price, double sl, double tp, int magic, string comment="")
{
  int dig = MarketInfo(symbol, MODE_DIGITS);

  price = NormalizeDouble(price, dig);
  sl = NormalizeDouble(sl, dig);
  tp = NormalizeDouble(tp, dig);
 
  string _lot = DoubleToStr(lot, 1);
  string _price = DoubleToStr(price, dig);
  string _sl = DoubleToStr(sl, dig);
  string _tp = DoubleToStr(tp, dig);

  Print("Sell \"", symbol, "\", ", _lot, ", ", _price, ", ", Slippage, ", ", _sl, ", ", _tp, ", ", magic, ", \"", comment, "\"");
 
  int res = OrderSend(symbol, OP_SELL, lot, price, Slippage, sl, tp, comment, magic, 0, clSell);
  if (res >= 0) {
    Sleep(SleepOk);
    return (res);
  }    
      
  int code = GetLastError();
  Print("Error opening SELL order: ", ErrorDescription(code), " (", code, ")");
  Sleep(SleepErr);
   
  return (-1);
}

bool CloseOrder(int ticket, double lot, double price)
{
  if (!OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) return(false);
  int dig = MarketInfo(OrderSymbol(), MODE_DIGITS);

  string _lot = DoubleToStr(lot, 1);
  string _price = DoubleToStr(price, dig);

  Print("CloseOrder ", ticket, ", ", _lot, ", ", _price, ", ", Slippage);
 
  bool res = OrderClose(ticket, lot, price, Slippage, clClose);
  if (res) {
    Sleep(SleepOk);
    return (res);
  }    
      
  int code = GetLastError();
  Print("CloseOrder failed: ", ErrorDescription(code), " (", code, ")");
  Sleep(SleepErr);
   
  return (false);
}
Inguss
Inguss
Pievienots: 18.02.2005
Ziņojumi: 154
Re: Martingeila stratēģija
03.09.2007 03:01
Vēlamais lots tomēr būtu 0.01 un sākuma depozits ~3000$...ja ne vairāk
Inguss
Inguss
Pievienots: 18.02.2005
Ziņojumi: 154
Re: Martingeila stratēģija
03.09.2007 18:02
Džeki, ievērtējiet šo grālu, neticami, bet pelna arī uz lotu dubultošanu! Arhīvā ir html fails, kurš ir apm 13Mb liels, tā kā brouzerim iespējams būs kāds laiciņš jāpašancē lai atvērtu to - tāpēc pacietību!

http://www.sharebigfile.com/file/208713/StrategyTester-rar.html

Starp citu SoS, kamdēļ šajā forumā nav iespējams pievienot failus? Vai Tev šāds serviss prasīs papildus izdevumus?
Joke
Joke
Pievienots: 15.06.2005
Ziņojumi: 50
Re: Martingeila stratēģija
04.09.2007 17:03
Esmu peetiijis sho stratēģiju. Jāsaka, ka daļēji to izmantošu 2007g.MQ čempionāta ekspertā. daļēji tāpēc, ka gribu jau sākumā pieteikami apjomīgu loti izmantot. Martingeils nenosegs visu SL bet kādu 1/2. Un pārējo atgūs nākamie darījumi.   Patiesībā jau eksperts pelnītu arī tapat bez martingeila, tomēr ar ir interesantāk.

2006 g. chempionātā mans eksperts, kas izmantoja 100% martingelu, depozītu nolēja evil

Vispārīgi par martingeilu var pastāstīt savu pieredzi. Atrast labu indikatoru savienību ir svarīgi, taču vēl svarīgāk ir izvēlēties SL / TP attiecību. Un jo lielāka SL/TP attiecība, jo lielākam jābūt lotes reizinātājam. Un jo reizinātājs ir lielāks, jo sistēma var "paņemt" mazāku skaitu lošus pēc kārtas. Tomēr SL/TP attiecība nedrīkst būt mazāka par 2 savādāk nav pozitīvs rezultāts.
 
Forumu saraksts/Valūtas tirgi/Martingeila stratēģija
© 2004-2024 wallstreet.lv
e-mail: 
Pārpublicēšanas gadījumā atsauce uz wallstreet.lv obligāta!
Top.LV