Программисты помогите пожалуйста - страница 2

 
Alexey Volchanskiy:

Caps Lock заело? ) 

1. Надо распечатать полученный СЛ и посмотреть, что там реально рассчиталось. И проверить, что он больше уровня STOPLEVEL. Стоплевел можно посмотреть индикатором https://www.mql5.com/ru/code/15808

2. На некоторых счетах ECN нельзя в OrderSend  задавать Сл и ТП, их надо задавать через OrderModify

за ответ в любом случае спасибо.только сути в нем 0.повторяюсь - ОБЬЯСНИТЕ ПЛИЗ ЛОГИКУ АРИФМЕТИКИ вычесления SL и TP.ЗНАЮ ЧТО ТАКОЕ ASK И BID,DIGITS,POINT,

занимаюсь обучением ровно месяц.прошел учебник MQL4,практики 0.но ее хватает чтоб понять 

   if(Digits == 3||Digits == 5) //что есть проверка на количество знаков после запятой
    {
       Slippage    *= 10;
       TakeProfit  *= 10;
       StopLoss    *= 10;
    }
extern double    Lots         = 0.1;
extern int       Slippage     = 10;//должен умножить
extern int       StopLoss     =10;//УМНОЖИТЬ ЕСЛИ 5 ЗНАКОВ.У МЕНЯ ПЯТЬ НА АЛЬПАРИ
extern int       TakeProfit   =30; //
extern int       RSIPeriod    = 7;
extern int       Magic        =1087;

 2016.06.28 21:42:23.439 2016.06.23 02:55  торговля RSI EURUSD,M5: OrderModify error 130

И ВОТ ЭТО

 2016.06.28 21:42:23.402 2016.06.23 00:00  торговля RSI inputs: Lots=0.1; Slippage=5; StopLoss=10; TakeProfit=30; RSIPeriod=7; Magic=1087; 

КАК ОНИ ГЛОБАЛЬНО ИНИЦИИРОВАНЫ

ХОТЯ В КОДЕ Я НАПИСАЛ ТАК,ПОМИМО ФУНКЦИИ МОДИФИ

          SL = NormalizeDouble( Ask - StopLoss*Point,Digits);

 

ЕСТЬ ПРОВЕРКА НА КОЛИЧЕСТВО ЦИФР ПОСЛЕ ЗАПЯТОЙ.

ЕСТЬ ФУНКЦИЯ ДЛЯ ИЗМЕНЕНИЯ МИНИМАЛЬНОГО SL ЕСЛИ ОН НЕ СООТВЕТСТВУЕТ

 void CheckValidStop(string symbol,double price,double& sl)
{
  if(sl==0)
  return;

  double min_stop_server = MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT);
  if(MathAbs(price-sl) <= min_stop_server)
  {
     if(price>sl)
      sl = price - min_stop_server;
   else sl = sl + min_stop_server;   
  }///  if(MathAbs(price-sl) <= min_stop_server)     
  sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS));   
}//функция     

КОМПЛИМАТОР ВЫДАЕТ 0 ОШИБОК А ТЕСТЕР ПИШЕТ ERROR 130,НЕ ВЕРНЫЙ СТОП ЛОС 

 

 if(CountTrades() <= 0&&MaRSI<=30 )
  {
     if( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"тест",Magic,0,Green))
      {  int  ticket = OrderTicket(); 
         SL = NormalizeDouble( Ask - StopLoss*Point,Digits);
         TP = NormalizeDouble( Ask + TakeProfit*Point,Digits);
         ModifyOrder(ticket,OrderOpenPrice(),SL,TP,0,Black);
      }   
  }//   if(CountTrades <= 0&&MaRSI>=70 )  


В ТОРГОВОМ УСЛОВИИ СТОЯТ НУЛИ НА УНИ 

ВИРСАЛЬНОСТЬ СЧЕТОВ.

МНЕ ОЧЕНЬ ВАЖНО ПОНЯТЬ ЛОГИКУ МАТЕМАТИКИ РАСЧЕТОВ ПЕРЕМЕННЫХ SL-TP

и почему условие на DIGITS козлит

 

 
segano:

В ТОРГОВОМ УСЛОВИИ СТОЯТ НУЛИ НА УНИ 

ВИРСАЛЬНОСТЬ СЧЕТОВ.

МНЕ ОЧЕНЬ ВАЖНО ПОНЯТЬ ЛОГИКУ МАТЕМАТИКИ РАСЧЕТОВ ПЕРЕМЕННЫХ SL-TP

и почему условие на DIGITS козлит

 

Попробуйте вывести принтом значение вот эти функции  OrderTicket() и OrderOpenPrice().

 Как-то так.

if(CountTrades() <= 0&&MaRSI<=30 )
  {
     if( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"тест",Magic,0,Green))
      { 
       Print("  OrderTicket() = ",OrderTicket());  
       Print("  OrderOpenPrice() = ",OrderOpenPrice());  
         int  ticket = OrderTicket(); 
         SL = NormalizeDouble( Ask - StopLoss*Point,Digits);
         TP = NormalizeDouble( Ask + TakeProfit*Point,Digits);
         ModifyOrder(ticket,OrderOpenPrice(),SL,TP,0,Black);
      }   
  }//   if(CountTrades <= 0&&MaRSI>=70 )  
 
Alekseu Fedotov:

Попробуйте вывести принтом значение вот эти функции  OrderTicket() и OrderOpenPrice().

 Как-то так.

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

я уже что только не делал.и добавлял стоплос и отнимал.убирал условие DIGITS == 5

 
segano нога:
SL = NormalizeDouble( Ask - StopLoss*Point,Digits);
TP = NormalizeDouble( Ask + TakeProfit*Point,Digits);

Если SL и TP устанавливаются после открытия ордера, то логичнее для рассчётов использовать OrderOpenPrice() вместо Ask и Bid.

В Вашем случае это будет выглядеть так:

SL = NormalizeDoubleOrderOpenPrice() - StopLoss*Point,Digits);

TP = NormalizeDoubleOrderOpenPrice() + TakeProfit*Point,Digits); 

 
segano нога:

В ТОРГОВОМ УСЛОВИИ СТОЯТ НУЛИ НА УНИ 

ВИРСАЛЬНОСТЬ СЧЕТОВ.

МНЕ ОЧЕНЬ ВАЖНО ПОНЯТЬ ЛОГИКУ МАТЕМАТИКИ РАСЧЕТОВ ПЕРЕМЕННЫХ SL-TP

и почему условие на DIGITS козлит

 

input int TP = 10;      //Тейкпрофит в пунктах
input int SL = 10;      //Стоплос    в пунктах

ushort mtp;             //множитель пунктов



int OnInit(){
   
   mtp = 1;
   if(Digits() == 5 || Digits() == 3)  //Если пятизнак, или трехзнак, то множитель равен 10
      mtp = 10;
      
   return(INIT_SUCCEEDED);
}

void BUY(){
   /*MqlTick tick;
   RefreshRates();
   SymbolInfoTick(Symbol(), tick);
   
   //ордер на buy
   int    cmd   = OP_BUY;
   double price = tick.ask;*/
  
   
   double tp    = price +    TP * Point()    * mtp;    //Тейкпрофит в ценах
   double sl    = price -    SL * Point()    * mtp;    //Стоплос    в ценах
   
   OrderSend(/*Symbol(), cmd, lot, price, slp, */sl, tp/*, NULL, magic*/)
   
}
Обычно в советнике используется два вида тейкпрофита и стоплоса.
Первый - выражен в пунктах    (тип int).       Используется в настройках советника.

Второй - выражен в виде цены (тип double). Он используется как аргумент для функции OrderSend();

Стоплос (или тейкпрофит) выраженный в виде цены инициализируется при помощи стоплоса (тейпрофита) выраженного в виде пунктов.


Я обычно так пользуюсь.

 
Друзья, нужен советник для ловли гэпов. Искал в интернете - не нашел.
Смысл в следующем:
в заданное мной время советник выставляет бай и сел стопы на заданном уровне от цены, и держит их на этом уровне в течении 1-5 минут сдвигая вслед за ценой (чтоб не открылись на новости или перед закрытием сессии)
в идеале чтоб он закрывал сделку сам в определенное время или как только цена после открытия сессии сдвинулась хотябы на 1 пункт
если вы знаете такого советника можно ли взять ссылку или если есть добровольцы его написать бесплатно (вместе заработаем потом) буду очень признателен.
 
noxter195:
Друзья, нужен советник для ловли гэпов. Искал в интернете - не нашел.
Смысл в следующем:
в заданное мной время советник выставляет бай и сел стопы на заданном уровне от цены, и держит их на этом уровне в течении 1-5 минут сдвигая вслед за ценой (чтоб не открылись на новости или перед закрытием сессии)
в идеале чтоб он закрывал сделку сам в определенное время или как только цена после открытия сессии сдвинулась хотябы на 1 пункт
если вы знаете такого советника можно ли взять ссылку или если есть добровольцы его написать бесплатно (вместе заработаем потом) буду очень признателен.
На форуме работает поиск. Наберите "советник гэп" и ограничьте поиск по кодобазе.
 
Karputov Vladimir:
На форуме работает поиск. Наберите "советник гэп" и ограничьте поиск по кодобазе.

искал. не нашел того что мне надо.

повторюсь 

Смысл в следующем:
в заданное мной время советник выставляет бай и сел стопы на заданном уровне от цены, и держит их на этом уровне в течении 1-5 минут сдвигая вслед за ценой (чтоб не открылись на новости или перед закрытием сессии)

в идеале чтоб он закрывал сделку сам в определенное время или как только цена после открытия сессии сдвинулась хотябы на 1 пункт

тоесть допустим в 12:55 советник выставляет отложки  бай и селл стоп. Далее до 12:59:55 он держит отложки на 10п от цены сам сдвигая их за ценой. В 12:59:55 он перестает двигать отложки вслед за ценой. В идеале после того как сделка открылась необходимо выставление положительного стопа или трейлинга с заданными мной параметрами.

Причина обращения: