Ошибки, баги, вопросы - страница 873

 
mario065:

Здравствуйте Решетов,

Ето для Вас "Что за хрень?",а для меня условие,когда надо делат вызов функция модификации.

Если посмотрели код,етогово не написали бы.

В коде ест:

  double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),4);
  double SL   = NormalizeDouble(PositionGetDouble(POSITION_SL),4);
  double TP   = NormalizeDouble(PositionGetDouble(POSITION_TP),4);

А толку, что оно там есть? Вы для какой  позиции эту хрень вычисляете? Попробуйте через Print() или через дебагер посмотреть, какие там у Вас значения переменных SL, TP и Open перед if() и какие у открытой позиции в журнале.
 

Спосибо Решетов,

Потделано:

  double buy_trail = 0;
  double sel_trail = 0;
  double SL,TP,Open;
  if(PositionSelect(Symbol())){
    if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
      {
      Open = PositionGetDouble(POSITION_PRICE_OPEN);
      SL   = PositionGetDouble(POSITION_SL);
      TP   = PositionGetDouble(POSITION_TP);
      Bid  = SymbolInfoDouble(Symbol(),SYMBOL_BID);
      buy_trail = NormalizeDouble(Bid - Open,Digits());
      if(buy_trail > MStop)
       {
        if(NormalizeDouble((Bid - MStop),Digits()) >= Open && Open > SL)
          {
           ModifyPosition(Symbol(),Open,TP);
          }
          if(NormalizeDouble((Bid - MStop),Digits()) > SL && Open <= SL)
           {
            ModifyPosition(Symbol(),NormalizeDouble((SL + 0.001),Digits()),TP);
           }
        }
      }
    if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
      {
      Open = PositionGetDouble(POSITION_PRICE_OPEN);
      SL   = PositionGetDouble(POSITION_SL);
      TP   = PositionGetDouble(POSITION_TP);
      Ask  = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
      sel_trail = NormalizeDouble(Open - Ask,Digits());
      if(sel_trail > MStop)
       { 
        if(NormalizeDouble((Ask + MStop),Digits()) <= Open && Open < SL)
          {
           ModifyPosition(Symbol(),Open,TP);
          }
          if(NormalizeDouble((Ask + MStop),Digits()) < SL && Open >= SL)
           {
            ModifyPosition(Symbol(),NormalizeDouble((SL - 0.001),Digits()),TP);
           }
        }
      }
     }

Сама функция модификации:

//+------------------------------------------------------------------+
//| Modify position.                                                 |
//+------------------------------------------------------------------+
bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit){
//---- обявяване на структурата и резултата на търговското искане
   MqlTradeRequest request={0};
   MqlTradeResult result={0};
//---- структурна инициализация на  търговското искане MqlTradeRequest за модифициране на  позиция
   request.action       = TRADE_ACTION_SLTP;
   request.symbol       = symbol;
   request.sl           = StopLoss;
   request.tp           = Takeprofit;
   string word          = "";
   StringConcatenate(word,
                     "<<< ============ Modifyposition():   Модифицираме позицията  ",
                     symbol," ============ >>>");
   Print(word);
//---- модифицираме позицията и  проверяваме резултата от търговското искане
   if(!OrderSend(request,result) || result.deal==0)
     {
      Print("Modify error =", GetLastError());
      return(false);
     }
   return(true);
  }

Так,тепер не находит позиции.

Избавился из : ERR_TRADE_SEND_FAILED  - 4756 

Счас 4753- Позиция не найдена.

Иногда срабативает,но ест и такая опечетка,что не нашел позиция. 

 
mario065:

Спосибо Решетов,

Потделано:

Сама функция модификации:

Так,тепер не находит позиции.

Избавился из : ERR_TRADE_SEND_FAILED  - 4756 

Счас 4753- Позиция не найдена.

Иногда срабативает,но ест и такая опечетка,что не нашел позиция. 

Лучше пользоваться готовыми торговыми классами. См. Как использовать торговые классы Стандартной библиотеки при написании советника

Например, модификация позиции для символа:

//--- Класс CTrade
#include <Trade\Trade.mqh>

//--- Объект класса CTrade
CTrade mytrade;



void OnTick() {
...
  if (myposition.Select(_Symbol))
  {
    int newStoploss = 250;
    int newTakeprofit = 500;
    double SL = mysymbol.Ask() – newStoploss*_Point;    
    double TP = mysymbol.Ask() + newTakeprofit*_Point;  
    // модифицируем открытую позицию по этому символу
    mytrade.PositionModify(_Symbol,SL,TP);
  }
...
}
Получается очень коротко и ясно.
 

Все-получилос.

Yedelkin  помог.Вот  код. 

Спосибо :) 

Файлы:
 

разбаньте мой IP (сейчас на домашнем компе получаю:

403 - запрещено. Доступ запрещен.
Предоставленные учетные данные не дают права на просмотр этого каталога или страницы.

).

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

Запущено до 10 терминалов + браузер. Сайт не выкачивал, не ломал и т. п. - в общем, ничего противоречащего правилам форума - не делал. 

 
notused:

разбаньте мой IP (сейчас на домашнем компе получаю:

).

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

Запущено до 10 терминалов + браузер. Сайт не выкачивал, не ломал и т. п. - в общем, ничего противоречащего правилам форума - не делал. 

Такая же беда, примерно с 14-00 по Киеву, модератор сказал, что я не в бане, в чем тогда причина? 

 
notused:

разбаньте мой IP (сейчас на домашнем компе получаю:

).

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

Запущено до 10 терминалов + браузер. Сайт не выкачивал, не ломал и т. п. - в общем, ничего противоречащего правилам форума - не делал. 

Странно? Ведь если в бане, да еще и по IP, то вроде бы и на форуме общаться тоже нельзя?
 
Reshetov:
Странно? Ведь если в бане, да еще и по IP, то вроде бы и на форуме общаться тоже нельзя?

Модератор сказал, что не в бане ведь захожу под своим ником, а IP поменял через auto hide ip, но это только маска, терминалы все равно запускаются под родным и сигналы не передаются!

Админы откликнитесь! 

 
remjte:

Модератор сказал, что не в бане ведь захожу под своим ником, а IP поменял через auto hide ip, но это только маска, терминалы все равно запускаются под родным и сигналы не передаются!

Админы откликнитесь! 

В сервисдеск лучше обратитесь. Хотя, наверно не получится, если у Вас профиль заблокирован?
 
Reshetov:Reshetov:
 В сервисдеск лучше обратитесь

C другого IP захожу. А аккаунт не забанен - забанен именно IP. В сервис-деск отписал, буду ждать, что завтра скажут.