Торгуем вероятность - страница 11

 
Тоже самое исследование, но на сгенерированных ценах, где приращения формируются по нормальному распределению.


Скрипт:

#property show_inputs

#define MAX_AMOUNT 250000
#define MAX_RAND 32767.0

extern int BeginPips = 100;
extern int EndPips = 1000;
extern int StepPips = 10;
extern int AmountBars = 100000;
extern int Deviation = 15;

int PricesHigh[MAX_AMOUNT], PricesLow[MAX_AMOUNT];

double GetRand()
{
  return(2 * MathRand() / MAX_RAND - 1);
}

void GetRandGauss( int Deviation, int& Rand1, int& Rand2 )
{
  double X1, X2, W = 2;
  
  while (W >= 1)
  {
    X1 = GetRand();
    X2 = GetRand();
    
    W = X1 * X1 + X2 * X2;
  }
  
  W = MathSqrt(-2 * MathLog(W) / W);
  
  Rand1 = X1 * W * Deviation;
  Rand2 = X2 * W * Deviation;
  
  if (Rand1 < Rand2)
  {
    int Tmp = Rand1;
    
    Rand1 = Rand2;
    Rand2 = Tmp;
  }
  
  return;
}

void GetPrices( int Deviation, int AmountBars )
{
  int Pos = 0;
  int Rand1, Rand2, Avg = 0;
  
  MathSrand(TimeLocal());
  
  while (Pos < AmountBars)
  {
    GetRandGauss(Deviation, Rand1, Rand2);
    
    PricesHigh[Pos] = Avg + Rand1;
    PricesLow[Pos] = Avg + Rand2;
    Avg = (PricesLow[Pos] + PricesHigh[Pos]) / 2;
        
    Pos++;
  }
  
  return;
}

int GetZigZagCount( int Pips, int AmountBars )
{
  bool FlagUP = TRUE;
  int i, Min, Max, Count = 0;
  int PriceHigh, PriceLow;
  
  Min = PricesHigh[0];
  Max = PricesLow[0];
  
  for (i = 0; i < AmountBars; i++)
  {
    PriceHigh = PricesHigh[i];
    PriceLow = PricesLow[i];
  
    if (FlagUP)
    {
      if (PriceHigh > Max)
        Max = PriceHigh;
      else if (Max - PriceLow >= Pips)
      {
        FlagUP = FALSE;
        Min = PriceLow;
        Count++;
      }
    }
    else // (FlagUP == FALSE)
    {
      if (PriceLow < Min)
        Min = PriceLow;
      else if (PriceHigh - Min >= Pips)
      {
        FlagUP = TRUE;
        Max = PriceHigh;
        Count++;
      }
    }
  }
  
  return(Count);
}

void start()
{
  int Pips, Amount;
  int handle;
  
  GetPrices(Deviation, AmountBars);
  
  handle = FileOpen("Analyse.prn", FILE_WRITE);
  
  for (Pips = BeginPips; Pips <= EndPips; Pips += StepPips)
  {
    Amount = GetZigZagCount(Pips, AmountBars);
    
    FileWrite(handle, Pips + " " + Amount);
  }
  
  FileClose(handle);
  
  return;
}

Результат сильно зависит от параметра Deviation - разброс (среднеквадратичное отклонение).
ׂ 

Те же графики:
ׂ 
ׂ 
ׂ 
ׂ 

При параметрах по-умолчанию получается схожая зависимость - от квадрата. Но она полностью нарушается при изменении параметра Deviation в сторону.
Проверял рыночные цены на мажорах, зависимость от квадрата сохраняется.
 
getch >>:
Повтор:

Советник считает количество колен ЗигЗага (не менее Pips) и записывает в файл:
Запускается в тестере с оптимизацией:


График зависимости количества колен от их мин. размера (Pips):


Графики зависимости отношения вероятностей TP и SL (p(SL) / p(TP)) при отношении TP / SL = Koef от размера SL

В логарифмическом масштабе график нагляднее, кстати, будет. Что касается взаимоотношений TP и SL, то проще и однозначнее в интерпретации устроить лобовую проверку в том же тестере, сделав параметром, например, их отношение. Почему-то мне кажется, что для случайных входов средний итог сделки всегда будет стремиться к спреду, со знаком минус, естественно.

 
Candid >>:

В логарифмическом масштабе график нагляднее, кстати, будет.

 
не пойму, что вы считаете... Вероятность достижения ТП и СЛ?
Так это просто...
Вероятность ТП = (СЛ - спред) / (ТП + СЛ)
Вероятность СЛ = (ТП + спред) / (ТП + СЛ)
 
Candid >>:

Что касается взаимоотношений TP и SL, то проще и однозначнее в интерпретации устроить лобовую проверку в том же тестере...

Поскольку копировал пост из другой темы, то остались старые обозначения: TP и SL. Стоит их интерпретировать, как Pips1 и Pips2. Основное заключение сформулировано в Гипотезе.

 
kharko писал(а) >>
не пойму, что вы считаете... Вероятность достижения ТП и СЛ?
Так это просто...
Вероятность ТП = (СЛ - спред) / (ТП + СЛ)
Вероятность СЛ = (ТП + спред) / (ТП + СЛ)


Проверим - TP = 20, SL = 20 => P(TP)=(SL-2)/(20+20) = 18/40 = 0.45, P(SL)=(TP+2)/(TP+SL) =(20+2)/(20+20)=22/40 = 0.55

То есть не равны :))))
 
getch >>:

Поскольку копировал пост из другой темы, то остались старые обозначения: TP и SL. Стоит их интерпретировать, как Pips1 и Pips2. Основное заключение сформулировано в Гипотезе.

Подправил пост на правильную интерпретацию.

 
SProgrammer >>:


Проверим - TP = 20, SL = 20 => P(TP)=(SL-2)/(20+20) = 18/40 = 0.45, P(SL)=(TP+2)/(TP+SL) =(20+2)/(20+20)=22/40 = 0.55

То есть не равны :))))

Когда открываете позицию, вы уже в убытке на величину спреда....

 
kharko писал(а) >>

Когда открываете позицию, вы уже в убытке на величину спреда....


А вероятность тут причем?
 
SProgrammer >>:


А вероятность тут причем?

Вероятность равна 0.5, если равны расстояния, которые должна пройти цена. СЛ-спред=ТП+спред