Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 113

 
hoz:


Вообще-то да. Может уже поздно, но я что-то не втыкаю. Вот по сути прибыль в пп. это и есть расстояние от открытия до закрытия. Почему тогда не верно выражение?

Потому, что нужно ещё поделить на Point результат этого выражения
 

Что-то я совсем уже загоняю... :) Задачка:

1. Есть открытая позиция объёмом 0.1 лота

2. Её ТейкПрофит равен 50 пунктов.

3. Рассчитываю её потенциальную прибыль по формуле PotentialProfit = Lots*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE);

4. Из расчёта получаю потенциально-возможную прибыль 5.00 долларов (0.1*50*1.0) Замечательно.

Позиция уходит в минус и на каком-то рубеже открывается ещё одна усредняющая Бай, но с лотом 0.2

1. Рассчитываю безубыток для этих двух позиций. Функция уже давно используется по мере надобности и пока не замечал нареканий:

//+----------------------------------------------------------------------------+
/*
Расчёт уровня БУ для множества по одному инструменту:
сумма лотов = суммарная позиция (СП)
стоимость тика СП = СТ
профит СП = ПСП
Формула расчёта довольно проста:
КП = ПСП / (СТ * СП)
В которой узнаём количество пипс (КП) до уровня БУ относительно текущей цены (ТЦ) символа.
И подставив КП в формулу БУ = ТЦ - КП * Point получаем уровень цены БУ.
В зависимости от направления СП выбирается прибавлять либо отнимать от ТЦ.
*/
double PriceWL(int op, int m1, int m2, double &ll) {
   double Res, pp, pt, tic, NumPP, Prof=0, SumLot=0.00000001;
   int i;
   
   pt =MarketInfo(sy,MODE_POINT);
   tic=MarketInfo(sy,MODE_TICKVALUE);                          // Стоимость тика СТ
   for (i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()==m1 || OrderMagicNumber()==m2) {
            Prof+=(OrderProfit()+OrderSwap()+OrderCommission());  // Суммарный профит позиций ПСП
            SumLot+=OrderLots();                                  // Суммарный лот позиций    СП
            }
         }
      }
   SumLot=MathAbs(NormalizeLot(SumLot));
   NumPP=MathAbs(Prof/(tic*SumLot));                           // Количество пунктов до уровня бу КП
   if (op==0) Res=Ask+NumPP*pt;
   if (op==1) Res=Bid-NumPP*pt;
   ll=SumLot;
   return(Res);
}
//+----------------------------------------------------------------------------+

2. Замечательно. Подсчитали уровень безубытка, но... если на него поставить тейки этих двух позиций, то они закроются в ноль. Хорошо, думаю я. Теперь мне нужно к этому уровню БУ прибавить столько пунктов, сколько нужно, чтобы получилась общая прибыль, равная ранее подсчитанной - 5 долларов.

3. И вот тут у меня затыка в мозгу. Что я делаю: беру 5 долларов, делю на суммарный лот этих двух позиций (0.1+0.2=0.3), помноженный на TICK_VALUE

имею 5/(0.3*1.0) = 16.66666. Далее множу это на Point (0.00016) и прибавляю к цене безубытка.

4. Прекрасно. Тейки туда переносятся, но, как мне кажется, общая прибыль закрывающихся по этому уровню двух Баек не равна 5 долларов - она, мне кажется, меньше. Это видно из графика тестирования. На нём чётко прослеживается, что когда закрывается одна позиция, то прирост баланса намного больше, чем когда закрывается множество позиций по подсчитанному уровню общего тейка (эти места на графике видно по появлению на них линии эквити). График:


Где я ошибаюсь?

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

 
semiromid:

У меня цена состоит из 5-и цифр . Пример : 1.3221.


Это значит из 4-х цифр. Имеется, в виду после запятой 4 или 5. Из пяти цифр, это было бы, например, 132210.
 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Господа программисты! Пожалуйста подскажите, как объединить советника с индикатором?

К примеру взят простой бот mo_bidir.mq4, который торгует своим алгоритмом, и мне нужно что бы он продолжал открывать сделки по своему алгоритму но после сигнала 3х МА -

Например по сигналу - Three Moving Averages:

FastEMA>MediumEMA>SlowEMA (тренд вверх) - бот покупает

FastEMA<MediumEMA<SlowEMA (тренд вниз) – бот продаёт

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod = 48;

Причем мне нужно чтобы советник продолжал торговать на пятиминутке, а индикатор подавал сигналы с дневного или 4х часового таймфрейма, ну и что бы можно было менять таймфреймы в настройках бота.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Я извиняюсь за повтор, но хотябы подскажите в какую ветку форума обратиться, или нужно создать новую тему?

Спасибо.

 
Вам сюда : Работа
 

Всем привет. Объясните плиз, почему OrderSend не открывает позицию?

if (NormalizeDouble(Open[0],Norm)>ma && NormalizeDouble(Bid,Norm)<=ma)

      {

      if (CheckFiltr()>=Filtr) 

         {

         Print (CheckFiltr()+" Buy"); <= Это в журнале есть, значит должна открыться сделка.

         for (i=0;i>5;i++)

            {

            res=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-Sl*Point,0,"OpenBuy",Magik,0,Green);

            Print ("Проверка Бай "+i); <= Этого в журнале нет.

            if (res>0) break;

            Print (GetLastError()); <= Этого в журнале нет.

            Sleep (5000);

            }

         }

      }   
 
for (i=0;i<5;i++)
 
artmedia70:

Что-то я совсем уже загоняю... :) Задачка:

1. Есть открытая позиция объёмом 0.1 лота

2. Её ТейкПрофит равен 50 пунктов.

3. Рассчитываю её потенциальную прибыль по формуле PotentialProfit = Lots*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE);

4. Из расчёта получаю потенциально-возможную прибыль 5.00 долларов (0.1*50*1.0) Замечательно.

Позиция уходит в минус и на каком-то рубеже открывается ещё одна усредняющая Бай, но с лотом 0.2

1. Рассчитываю безубыток для этих двух позиций. Функция уже давно используется по мере надобности и пока не замечал нареканий:

2. Замечательно. Подсчитали уровень безубытка, но... если на него поставить тейки этих двух позиций, то они закроются в ноль. Хорошо, думаю я. Теперь мне нужно к этому уровню БУ прибавить столько пунктов, сколько нужно, чтобы получилась общая прибыль, равная ранее подсчитанной - 5 долларов.

3. И вот тут у меня затыка в мозгу. Что я делаю: беру 5 долларов, делю на суммарный лот этих двух позиций (0.1+0.2=0.3), помноженный на TICK_VALUE

имею 5/(0.3*1.0) = 16.66666. Далее множу это на Point (0.00016) и прибавляю к цене безубытка.

4. Прекрасно. Тейки туда переносятся, но, как мне кажется, общая прибыль закрывающихся по этому уровню двух Баек не равна 5 долларов - она, мне кажется, меньше. Это видно из графика тестирования. На нём чётко прослеживается, что когда закрывается одна позиция, то прирост баланса намного больше, чем когда закрывается множество позиций по подсчитанному уровню общего тейка (эти места на графике видно по появлению на них линии эквити). График:


Где я ошибаюсь?

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

прибавляете даже если позиция Sell ??
Файлы:
mr01.mq4  6 kb
 
FAQ:

for (i=0;i<5;i++)

Прошу прощения, объясните в чем тут ошибка. Я не могу понять.

 
pako:
прибавляете даже если позиция Sell ??

Я ж говорю о позициях Бай. Не нужно уж совсем так дотошно. Естественно, для позиций Sell я отнимаю.
Причина обращения: