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

 
hoz:



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

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

 

Вот смотрите, как я проверяю сверху и снизу при тралении без ошибок для бая:

          if(OrderStopLoss() > OrderOpenPrice())
          {
            if(NormalizeDouble(Bid-OrderStopLoss()-plus*tral,Digits) > prev)
            if(Bid > NormalizeDouble(OrderStopLoss()+plus*tral+prev,Digits))
            {
              SL = NormalizeDouble(OrderStopLoss()+plus*part*tral,Digits);
              ModifyOrder(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Blue);return(0);
          } }

 

 Могу дать функцию ModifyOrder(), годится для всех модификаций ордеров и позиций.

 
Vinin:

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


 Б.У. есс-но по пипсам тянется. Я имел ввиду вообще вызов функции Б.У. осуществлять на каждом тике или на открытии бара например... Но это уже глупо. Т.к. за бар цена может проскачить много. Значит вызов будет как и был поулчается потиковый, так? Просто я думал, может условие какое добавить, чтоб не вызывался на каждом тике. Думаю сравнивать нужно СТОП теперешний и тот что планируется поставить, типа того...

 В общем-то. Странно получается.

 В start я добавил условие, вышло так:

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }

 Теперь ошибок нет.

Но вот непонятно то, что в самой функции MovingStopLossToBU() модификация происходит только в случает если стоп не равен стопу по Б.У. Вот тут видно:

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
    if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
    {
       Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
    }
Как это понять тогда?
 
Добрый вечер, подскажите пожалуйста, как раскрасить свечи выше средней МА(10) в зеленый, а ниже в красный?
 
hoz:


 Б.У. есс-но по пипсам тянется. Я имел ввиду вообще вызов функции Б.У. осуществлять на каждом тике или на открытии бара например... Но это уже глупо. Т.к. за бар цена может проскачить много. Значит вызов будет как и был поулчается потиковый, так? Просто я думал, может условие какое добавить, чтоб не вызывался на каждом тике. Думаю сравнивать нужно СТОП теперешний и тот что планируется поставить, типа того...

 В общем-то. Странно получается.

 В start я добавил условие, вышло так:

 Теперь ошибок нет.

Но вот непонятно то, что в самой функции MovingStopLossToBU() модификация происходит только в случает если стоп не равен стопу по Б.У. Вот тут видно:

Как это понять тогда?

В Вашем примере, когда стоп равен нулю, знвчит только что открыта позиция без стопа. А я Вам дал случай, когда уже в безубытке. 

Смотрите выше, я же дал вам свой трал безошибочный! И могу функцию дать.

 
agat8430:
Я не понимаю
Как его  Отредактировать ? как понимать ? 
 Тогда ты пришёл не по адресу, если не понимаешь. Изучай, что не понимаешь, спросишь.. А если ничего не понимаешь, то и не нужно тебе оно.
 
borilunad:
Смотрите выше, я же дал вам свой трал безошибочный! И могу функцию дать.


 Я ж когда писал, не видел Вашего ответа. Щяс буду смотреть.

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

 
borilunad:

В Вашем примере, когда стоп равен нулю, знвчит только что открыта позиция без стопа. А я Вам дал случай, когда уже в безубытке. 

Смотрите выше, я же дал вам свой трал безошибочный! И могу функцию дать.


 Да нет, не без стопа. Я ж кусок выложил только. Вот функцию безубытка моя:

//+-------------------------------------------------------------------------------------+
//| Перевод в б.у. рыночных ордеров                                                     |
//+-------------------------------------------------------------------------------------+
void MovingStopLossToBU()
{
    double priceBU;
    int type = OrderType();
    for (int i=OrdersTotal() - 1; i>=0; i--)
    {
        if (!OrderSelect(i,SELECT_BY_POS)) continue;
        if (i_magic != -1) if (OrderMagicNumber() != i_magic) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (OrderType() > 1) continue;
        
        RefreshRates();
        
        if (type == 0)
        {
           double price = Ask;
           int li_cmd = 1;
        }
        else
        {
           price = Bid;
           li_cmd = -1;
        }

           if (li_cmd * (price - OrderOpenPrice()) >= i_triggerForBU * pt)
           {
             priceBU = ND(OrderOpenPrice() + li_cmd * (i_preservedProfit * pt));
             if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
             {

                 if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
                 {
                     Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
                 }
               
                     Comment ("Ордер успешно переведён в безубыток");
                     Print ("Ордер успешно переведён в безубыток");
             }
           }
    }
}

 В строке ясно видно, что если стоп рассчитаный равен тому, который есть уже, то модификации не будет! Верно же? Значит проверка то изначально и была? Но пока в старте не вбил очередное условие перед функцией модификации ошибка 1 выскакивала постоянно:

 

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }
Вот почему.... это я и хочу понять. Вроде я всё описал досканально.
 
hoz:
 Тогда ты пришёл не по адресу, если не понимаешь. Изучай, что не понимаешь, спросишь.. А если ничего не понимаешь, то и не нужно тебе оно.


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

"У гениальных людей  гениальный ответ " 

 
agat8430:


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

"У гениальных людей  гениальный ответ " 

Для новичков в первую очередь:

Навигатор по форуму и ответы на часто задаваемые вопросы. Настоятельно Рекомендуется к Прочтению! (  1 2 3 4 5 6 ) 51 18.02.2011 FAQ