[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 479

 
Svinozavr >>:

Да, кажется, все проще - время сделки-то известно. Если так, то время по тайм-фрейму будет таково:


Time[iBarShift(NULL,tf,DealTime)]

где
tf - нужный тайм-фрейм,
DealTime - время (с датой) сделки


Спасибо, а как быть если сделки еще не было и DealTime - известное время планируемой сделки?

 
MoneyJinn >>:


Спасибо, а как быть если сделки еще не было и DealTime - известное время планируемой сделки?

Зачем вам?))) ок. Да все еще проще: tf*60*MathFloor(DealTime/60/tf) // смысл переменных тот же

Можете проверить по скрипту:

#property show_inputs
extern int tf=1440;
extern datetime DealTime;

void start() {Alert(TimeToStr(tf*60*MathFloor(DealTime/60/tf)));}
===
Исправлено. Забыл секунды к минутам привести.)))
 
у меня в советнике около 200 MA, при тестировани, когда жмешь "открыть график" они все рисуються.
можно их както убрать, чтоб не видно было?
спасибо
 
snowman647 >>:
у меня в советнике около 200 MA, при тестировани, когда жмешь "открыть график" они все рисуються.
можно их както убрать, чтоб не видно было?
спасибо

void HideTestIndicators( bool hide)
Функция выставляет флаг скрытия индикаторов, вызываемых экспертом. При открытии графика после тестирования индикаторы, помеченные флагом скрытия, не будут выведены на график тестирования. Перед каждым вызовом индикатор помечается текущим установленным флагом скрытия.
Необходимо отметить, что на график тестирования могут быть выведены только те индикаторы, которые непосредственно вызываются из тестируемого эксперта.

 
Пытаюсь освоить язык MQL в качестве практики решил добавить в советник перевертыш функцию Мартингейла!
Что бы при SL открывал ордер лотом умноженным на коэффициент, а при TP начинал с первоночального лота!
Но получилось что лот увеличивается с каждым ордером, не знаю как поставить условие на TP и SL!
Подскажите пожалуйста как должен выглядеть правильный код!
//--------------------------------------------------------------------
extern int  stoploss    = 50,
            takeprofit  = 50;
extern double  mult=2;
extern double      Lot=1;
int         tip;
//--------------------------------------------------------------------
int init()
{
   OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                        NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
}
//--------------------------------------------------------------------
int start()
{
   for (int i=0; i<OrdersTotal(); i++){   
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
         if (OrderSymbol()==Symbol()){
            tip = OrderType();
            Lot = OrderLots();return;}}}
   if (Lot==0) return;
   if (tip==0) OrderSend(Symbol(),OP_SELL,Lot*mult,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
   if (tip==1) OrderSend(Symbol(),OP_BUY ,Lot*mult,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
   return(0);
}
//-----------------------------------------------------------------
 
Kogalym >>:
Пытаюсь освоить язык MQL в качестве практики решил добавить в советник перевертыш функцию Мартингейла!
Что бы при SL открывал ордер лотом умноженным на коэффициент, а при TP начинал с первоночального лота!
Но получилось что лот увеличивается с каждым ордером, не знаю как поставить условие на TP и SL!
Подскажите пожалуйста как должен выглядеть правильный код!  

Должна быть функция вроде этой

double getLot()
{
   if(OrdersHistoryTotal()==0)return(0.1);
   // ищем самый последний закрытый ордер
   datetime time=0;
   int ticket=-1;
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==Symbol())
         {
            if(OrderCloseTime()>time)
            {
               time=OrderCloseTime();
               ticket=OrderTicket();
            }
         }
      }
   }
   if(OrderTicket()!=ticket)OrderSelect(ticket,SELECT_BY_TICKET);
   if(OrderProfit()<=0) return(NormalizeDouble(OrderLots()*Martin_Koef,2));
   if(OrderProfit()>0)return(0.1);
   //-----
}
 
Roger >>:

Да уже плешь проели с этим вопросом. Набираешь old tick здесь в поисковике и читаешь, читаешь, читаешь.

Если такой умный зачем сюда заходишь? Значить нахамить время написать не жалко, а ответить западло. Ну - ну.

 
StatBars >>:

Должна быть функция вроде этой


Не понимаю причем там время???
По моему за наращивание лота при убытке отвечают только 3 последние строчки
if(OrderTicket()!=ticket)OrderSelect(ticket,SELECT_BY_TICKET);
   if(OrderProfit()<=0) return(NormalizeDouble(OrderLots()*Martin_Koef,2));
   if(OrderProfit()>0)return(0.1);
 
Kogalym >>:


Не понимаю причем там время???
По моему за наращивание лота при убытке отвечают только 3 последние строчки

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

 
StatBars >>:

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

Написал советника который при TP открывает ордер в ту же сторону, а при SL открывает ордер в противоположную, но не как не могу вставить функцию Мартингейла и возврат к первона

//--------------------------------------------------------------------
extern int  stoploss    = 50,
            takeprofit  = 50;
extern double  mult=2;
extern double      Lot=1;
//--------------------------------------------------------------------
int init()
{
   OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                        NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
}
//--------------------------------------------------------------------
int start()
{   for (int i=0; i<OrdersTotal(); i++){   
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
         if (OrderSymbol()==Symbol()){
         Lot = OrderLots();return;}}}
            if (Lot==0) return;
        
  if(OrderType() == OP_SELL)
     if(OrderProfit()>0) OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
   else OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
                                                                        
    if(OrderType() == OP_BUY) 
    if(OrderProfit()>0) OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid - stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",777,Blue);
    else OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask + stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",777,Blue);
                                     
       
   return(0);
}
//-----------------------------------------------------------------

чальному лоту! Может покажете куда должна вставляться эта функция!