[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 124

 
Notter:

Добрый день,

 

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

 

Спасибо. 

 Как-то так

#include <stderror.mqh>

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int Err;
//----
       if(...........) //покупаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Blue,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
       if(...........) //продаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Red,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объект OBJ_ARROW.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 
dertop:


Да извините запутался, первый раз писал на форум. Сначала копипастел, затем решил ручками и запутался... но в примере выше все верно..

MA1>MA2 и МА1<MA3 и МА3<МА4 


Ознакомьтесь со следующей веткой
 
Vinin:


Что-то тут странно

 MA1>MA2 и MA2>MA3 и тут же MA1<MA3

Тем более что достаточно

 

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

Вопрос такой. Я уже не первый раз встречаю такую ситуацию:

 Если на каждом тике вызывать функцию траала или, например, безубытка, то выскакивает ошибка - 1. Что означает  согласно документации:

ERR_NO_RESULT   1       Нет ошибки, но результат неизвестен

 Если вызывать не открыто в функции старт, то есть не просто вписал функцию с параметрами прямо в start, а вызывать её на каждом баре, т.е. не потиково, то ошибки - нет...

Я имею ввиду так:

int start()
{
   MovingStopLossToBU();
// Что-то дальше делаем..

Почему так?

 И вообще как грамотнее это реализуется? На каждом тике будет накладно по ресурсам? 

 

Всем добрый день.

Нужна ваша помощь. Не пойму в чём дело

if (OrderStopLoss() !=  NormalizeDouble(t6,5))  

{

a=10;

То, что  OrderStopLoss()= 1.3017    и    NormalizeDouble(t6,5)=1.3017    условие всё равно выполняется, то есть a=10.  А оно не должно выполняться.

В чём может быть причина? 

 
hoz:

Вопрос такой. Я уже не первый раз встречаю такую ситуацию:

 Если на каждом тике вызывать функцию траала или, например, безубытка, то выскакивает ошибка - 1. Что означает  согласно документации:

 Если вызывать не открыто в функции старт, то есть не просто вписал функцию с параметрами прямо в start, а вызывать её на каждом баре, т.е. не потиково, то ошибки - нет...

Я имею ввиду так:

Почему так?

 И вообще как грамотнее это реализуется? На каждом тике будет накладно по ресурсам? 

Я бы Вам посоветовал не по барам, по столько-то пипс. Если необходимо, то для этого и служат ресурсы. А ошибка "не ошибка" выскакивает, когда повторяется цена для модификации, которая уже есть. Поэтому нужно сделать пошагово, как уже Вам посоветовал вначале.
 
hoz:

Вопрос такой. Я уже не первый раз встречаю такую ситуацию:

 Если на каждом тике вызывать функцию траала или, например, безубытка, то выскакивает ошибка - 1. Что означает  согласно документации:

 Если вызывать не открыто в функции старт, то есть не просто вписал функцию с параметрами прямо в start, а вызывать её на каждом баре, т.е. не потиково, то ошибки - нет...

Я имею ввиду так:

Почему так?

 И вообще как грамотнее это реализуется? На каждом тике будет накладно по ресурсам? 

 Трал пытается переставить СЛ на тот же уровень. Нужно добавить проверку, уровень трала должен отличатся от текущего СЛ. 

 
valeryk:

 Трал пытается переставить СЛ на тот же уровень. Нужно добавить проверку, уровень трала должен отличатся от текущего СЛ. 



 Так у меня ж есть проверка на этот случай:

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
{
  if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
  {
    Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
  }

}
 Если стоп - новый стоп (в б.у.)  не равен ноль... то модифицируем... Если нет, то не модифицируем. Поэтому мне и не понятно как так происходит. Ведь я понимаю, что нужна проверка на равенство прошлого и нового стопа и я её сделал.
 

 Здравствуйте ! подскажите пожалуйста . как можно  модифицировать начальный и последний ордер под 1 T/P спасибо

 

gi_304 = CountTrades();

   g_price_212 = 0;

   double ld_24 = 0;

   for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

      OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

      if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

         if (OrderType() == OP_BUY || OrderType() == OP_SELL) {

            g_price_212 += OrderOpenPrice() * OrderLots();

            ld_24 += OrderLots();

         }

      }

   }

   if (gi_304 > 0) g_price_212 = NormalizeDouble(g_price_212 / ld_24, Digits);

   if (gi_332) {

      for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

         OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

         if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_BUY) {

               g_price_180 = g_price_212 + TakeProfit2 * Point;

               gd_unused_196 = g_price_180;

               gd_308 = g_price_212 - Stoploss * Point;

               gi_268 = TRUE;

            }

         }

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_SELL) {

               g_price_180 = g_price_212 - TakeProfit2 * Point;

               gd_unused_204 = g_price_180;

               gd_308 = g_price_212 + Stoploss * Point;

               gi_268 = TRUE;

            }

         }

      }

   }

   if (gi_332) {

      if (gi_268 == TRUE) {

         for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

            OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

            if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

            if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) OrderModify(OrderTicket(), g_price_212, OrderStopLoss(), g_price_180, 0, Yellow);

            gi_332 = FALSE;

         }

      }

   }

   return (0);

 


 
agat8430:

 Здравствуйте ! подскажите пожалуйста . как можно  модифицировать начальный и последний ордер под 1 T/P спасибо


Отредактируйте этот код, что бы не походил на взломанный
Причина обращения: