[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 55

 
Присматриваю UMPC для использования во время основной работы, подскажите пожалуйста будет ли МТ4 работать вот на таком нетбуке http://cgi.ebay.com/4-8-TOUCH-LCD-BenQ-S6-HSDPA-UMPC-3G-NETBOOK-XP-/190490113552?pt=Laptops_Nov05&hash=item2c5a187610#ht_15003wt_1139 Фоткать слишом много, поэтому дал ссылку.
 
afirius:
Присматриваю UMPC для использования во время основной работы, подскажите пожалуйста будет ли МТ4 работать вот на таком нетбуке https://www.mql5.com/go?link=https://www.ebay.com/itm/4-8-TOUCH-LCD-BenQ-S6-HSDPA-UMPC-3G-NETBOOK-XP-/190490113552?hash=item2c5a187610&pt=Laptops_Nov05[hash]ht_15003wt_1139 Фоткать слишом много, поэтому дал ссылку.

да
 
Sergstuddek:
Здравствуйте. Напишите пожалуйста как должен выглядеть програмный код для открытия отложеного ордера(стопа) относительно уже открытого(последнего ордера).


Ну это уже классика. :)

Программный код должен выглядеть так:

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

Ваш запрос удовлетворён?

 
Можно ли в тестер МТ4 вводить желаемые параметры оптимизации текстовым или иным файлом?
 
Sergey_Rogozin:
Можно ли в тестер МТ4 вводить желаемые параметры оптимизации текстовым или иным файлом?
поищите автооптимизатор в кодебазе
 

С этой статьей знаком, пытался запустить автооптимизатор, но он у меня не заработал.

Не хватает знаний.

Надо мне что-то попроще.

Тем не менее, Спасибо.

 
drknn:


Ну это уже классика. :)

Программный код должен выглядеть так:

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

Ваш запрос удовлетворён?

+10 Хорошая удочка... :)

Теперь два варианта развития событий - человек напишет по этому алгоритму код, задавая вопросы по делу, либо укажет на то, что это не код, а алгоритм и будет ждать готовое решение... :)

 
sergeev:

вам надо отложенный байстоп/селстоп ордер

или надо стоплос в имеющемся ордере?


Первый вариант: отложенный байстоп/селстоп ордер.

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

 
drknn:


Ну это уже классика. :)

Программный код должен выглядеть так:

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

Ваш запрос удовлетворён?


Класика это хорошо, но всерано есть проблемка)))

Теретически я то это понимаю но на практике не получается, может посмотрите на мой код и скажете что не так

#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
// Суть советника в том что сначала он открывает первый ордер на покупку
// затем выставляет стопы в две стороны
// в одну сторону как продолжене уже открытого ордера
// в другую в два раза больше в случае разворота графика
// стопы выставляются по отношению к последнему открытому советником ордеру
// с каждым новым открытием нового отложеного ордера, все старые удаляються
// а ноые отложеные стопы уже открываются относительно нового открытого ордера.
#define MAGIC  20101012
extern double Lot=1;            // Размер лота
extern int TP=0;                // Тейкпрофит
extern int SL=0;                // СтопЛосс
extern int DS=0;                // Дистанция  для открытия ордера в противоположну сторону
int buys=0,sells=0;
int i=0;
//-----------------------------------------------------
void DeleteStopOrders()
{
  int res;
  for(int i=0;i<OrdersTotal();i++)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
    {
      if(OrderType()==OP_SELLSTOP)
        res=OrderDelete(OrderTicket());
      if(OrderType()==OP_BUYSTOP)
        res=OrderDelete(OrderTicket());
     }
  }
}
        
void OpenBuy()
    
   {
   int tickbuy2  =OrderSend(Symbol (), OP_BUY, Lot,  NormalizeDouble(Ask,Digits), 5, Ask-SL*Point,Ask+TP*Point, NULL, MAGIC, 0, Green); // покупка первого ордера при запуске советника
   }
//+------------------------------------------------------------------+
//| считаем количество открытых ордеров                              |
//+------------------------------------------------------------------+
int CalculateCurrentOrders1(string symbol)
{
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   return(buys+sells);   
}
//+------------------------------------------------------------------+
//| считаем количество отложеных ордеров                              |
//+------------------------------------------------------------------+
int CalculateCurrentOrders2(string symbol)
{
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUYSTOP)  buys++;
         if(OrderType()==OP_SELLSTOP) sells++;
        }
     }
//---- return orders volume
   return(buys+sells);   
}

int OpenStops()

{for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderType()==OP_BUY)   // Проверка на то что открытый ордер на покупку
int ticket;
double LotSize=OrderLots();                                                                                 // Размер лота открытого ордера
double OpenPrice=OrderOpenPrice();                                                                          // Цена открытия открытого ордера
ticket=OrderSend(Symbol(),OP_SELLSTOP,LotSize*2,OpenPrice-DS*Point,0,SL*Point,TP*Point,"",MAGIC,0,Red);            // Открытие отложки на продажу в противополжну сторону до открытого ордера   
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lot,OpenPrice+TP*Point,0,SL*Point,TP*Point,"",MAGIC,0,Blue);                  // Открытие отложки на покупку в сторону продолжения до открытого ордера

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderType()==OP_SELL)  // Проверка на то что открытый ордер на продажу
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,OpenPrice-TP*Point,0,SL*Point,TP*Point,"",MAGIC,0,Red);                  // Открытие отложки на покупку в сторону продолжения до открытого ордера
ticket=OrderSend(Symbol(),OP_BUYSTOP,LotSize*2,OpenPrice+DS*Point,0,SL*Point,TP*Point,"",MAGIC,0,Blue);            // Открытие отложки на покупку в противополжну сторону до открытого ордера
}
}
  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if (CalculateCurrentOrders1(Symbol())==0)
   OpenBuy();
  if (CalculateCurrentOrders2(Symbol())<=1)
  DeleteStopOrders();
  if (CalculateCurrentOrders2(Symbol())<=1)
   OpenStops();
//----
   return(0);
Понимаю, что это простенький советник но я только начинаю свой путь))) и уже есть проблемка
 

Вопрос по индикатору.

Индикатор кросовый. Рисует много стрелок в одну сторону, потом много в другую. Как сделать, чтоб рисовались только первые. Пробовал так как вриведенном коде, но при переключений таим фрейма вце меняется.

Подскажите как это правильно сделать.

 for(int i=limit-1;i>=0;i--)
   {      
         if ( s == 0 &&    условие продажи)
               {Продажа[i] = High[i]+point*Point;            
                s=1; b=0;}               
      
         if (b == 0 &&     условие покупки)
        
          
              {Покупка[i] = Low[i]-point*Point; 
               s=0; b=1;}
   }