Скачать MetaTrader 5

алгоритм рачсета лота по Фибоначчи mql4

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
pasha5282
141
pasha5282  

кто то подскажет алгоритм расчета лота по фибоначчи.

например, при объеме первой сделки 0.01 лот последовательность Фибоначчи примет следующий вид:

последовательность увеличения лота.

0.01, 0.02, 0.03, 0.05, 0.08, 0.13, 0.21, 0.34, 0.55, 0.89, 1.44, 2.33, 3.77, 6.10…
Alexander Mostovnek
2389
Alexander Mostovnek  

А что конкретно то не ясно?

Lot(i)=Lot(i-2)+Lot(i-1);

i++;

Boris
3953
Boris  
pasha5282:

кто то подскажет алгоритм расчета лота по фибоначчи.

например, при объеме первой сделки 0.01 лот последовательность Фибоначчи примет следующий вид:

последовательность увеличения лота.

0.01, 0.02, 0.03, 0.05, 0.08, 0.13, 0.21, 0.34, 0.55, 0.89, 1.44, 2.33, 3.77, 6.10…
Наверняка, задумали Мартин прикрыть фИговым листиком от Fibonacci. ;)
pasha5282
141
pasha5282  
borilunad:
Наверняка, задумали Мартин прикрыть фИговым листиком от Fibonacci. ;)

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

а этот код с виду понятен но как его впихнут в советник чтобы начало работать, пока еще мучаюсь.

Lot(i)=Lot(i-2)+Lot(i-1);

i++;
pasha5282
141
pasha5282  

нашол алгоритм на другом языку программирования но вот что то тоже не получается ((((((

fib1 = 1
fib2 = 1
 
n = input("Значение какого элемента ряда \
Фибоначчи вы хотите узнать? ")
n = int(n) # преобразование в целое число
 
i = 2 
while i < n:
    fib_sum = fib2 + fib1
    fib1 = fib2
    fib2 = fib_sum
    i += 1
 
print (fib_sum)


def fib(n):
    if n==1 or n==2:
        return 1
    return fib(n-1) + fib(n-2)
PapaYozh
3768
PapaYozh  
pasha5282:

нашол алгоритм на другом языку программирования но вот что то тоже не получается ((((((

Если Вы не всостоянии решить эту элементарную задачу, то Вам надо обратиться сюда.
ruslan
740
ruslan  
int fibonacci_lot(int v)
{
  int f, s;
   f = 1; // в идеале f=0
   s = 1 ;
   if (v < 3) return (1);
     while (v > 2)
      {
        f = f + s;
        f = f + s;
        s = f - s;
        f = f - s;
        v--;
      }
 return (s);//  результат будет 1,1,2,3,5,8,13.......
}


как то так  пока не проверял ... результат делить на 100 или 1000 что получить double числа


Boris
3953
Boris  
pasha5282:

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

а этот код с виду понятен но как его впихнут в советник чтобы начало работать, пока еще мучаюсь.

Можно это:

  for(int i = 0; i < limit; i++)
  {    
// потом то, что Вам предложили выше
pasha5282
141
pasha5282  
int fibonacci_lot(int v)
{
  int f, s;
   f = 1;
   s = 1 ;
   if (v < 3) return (1);
     while (v > 2)
      {
        s= f + s; // Ошибка?
        f = f + s;
        s = f - s;
        f = f - s;
        v--;
      }
 return (s);//  результат будет 1,1,2,3,5,8,13.......
}
ruslan
740
ruslan  

нет всё правильно  результат в логе смотрите   .... единственое что надо начать в цикле не с еденицы а с двойки i=1 выставить i=2

//+------------------------------------------------------------------+
//|                                                test fiba lot.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
  
   for(int i=1; i<15 ; i++) Print(fibonacci_lot(i));
//----
   return(0);
  }
//+------------------------------------------------------------------+

int fibonacci_lot(int v)
{
  int f, s;
   f = 1; // в идеале f=0
   s = 1;
 if (v < 3) return (1);
  while (v > 2)
   {
     f = f + s;
     f = f + s;
     s = f - s;
     f = f - s;
     v--;
   }
 return (s);
}
Boris
3953
Boris  
pasha5282:

Правильно! 0+1=1; 1+1=2; и т.д. Чтобы получить 2, нужно сложить два предыдущих числа.

Потому проще умножать каждый последущий лот на 1.618 и, конечно, с нормализацией.

А ещё лучше последовать уже данному Вам совету:

Если Вы не в состоянии решить эту элементарную задачу, то Вам надо обратиться сюда.  

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий