Ответить
12.12.2014, 22:45
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
Привет eevviill)
у меня вопрос такой, как написать в коде логику открытия ордеров в моем случае, чтобы ордера открывались по началу сигнала(условие A>B),смотрите ниже рисунок и кусок кода,в другой ветке ответили, но там по барам открытие, то есть в моем случае ордера откроются на новых барах если A>B, а мне то нужно открыть только 1 ордер при начале сигнала и все...

PHP код:
extern int MaxOrders=5;

int start()
{
 if(
OrdersTotal() < MaxOrders)
  {
//---------------------

   
if(A>B)
    {
     
OrderSend(....);
    }

//---------------------
  
}
return(
0);

тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
13.12.2014, 14:30
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Привет eevviill)
у меня вопрос такой, как написать в коде логику открытия ордеров в моем случае, чтобы ордера открывались по началу сигнала(условие A>B),смотрите ниже рисунок и кусок кода,в другой ветке ответили, но там по барам открытие, то есть в моем случае ордера откроются на новых барах если A>B, а мне то нужно открыть только 1 ордер при начале сигнала и все...

PHP код:
extern int MaxOrders=5;

int start()
{
 if(
OrdersTotal() < MaxOrders)
  {
//---------------------

   
if(A>B)
    {
     
OrderSend(....);
    }

//---------------------
  
}
return(
0);

Смотря какое условие.
13.12.2014, 20:01
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
Смотря какое условие.
например такое

if(MA1>MA2)
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
14.12.2014, 14:24
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
например такое

if(MA1>MA2)
http://forexsystemsru.com/yazyk-programmirovaniya-mql4/67073-uroki-po-programmirovaniyu-na-yazyke-mql4-ot-eevviill-3.html#post413248
14.12.2014, 17:41
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
http://forexsystemsru.com/yazyk-programmirovaniya-mql4/67073-uroki-po-programmirovaniyu-na-yazyke-mql4-ot-eevviill-3.html#post413248
Василий, по вашей ссылке неясно где и что смотреть, там целая страница ответов и коментов....
мне было бы понятнее, если бы показал на моем куске кода,...

PHP код:
extern int MaxOrders=5;

int start()
{
 if(
OrdersTotal() < MaxOrders)
  {
//---------------------

   
if(MA1>MA2)
    {
     
OrderSend(....);
    }

//---------------------
  
}
return(
0);

тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
22.12.2014, 15:00
Аватар для borobor
borobor borobor вне форума Элитный участник
Регистрация: 03.05.2009 / Адрес: новосибирск / Сообщений: 935
Поблагодарили 1,556 раз(а) / Репутация: 1567
Василий, по вашей ссылке неясно где и что смотреть, там целая страница ответов и коментов....
мне было бы понятнее, если бы показал на моем куске кода,...

PHP код:
extern int MaxOrders=5;

int start()
{
 if(
OrdersTotal() < MaxOrders)
  {
//---------------------

   
if(MA1>MA2)
    {
     
OrderSend(....);
    }

//---------------------
  
}
return(
0);

выбери что-нибудь

Истина, если a равно b a == b;
Истина, если a не равно b a != b;
Истина, если a меньше b a < b;
Истина, если a больше b a > b;
Истина, если a меньше или равно b a <= b;
Истина, если a больше или равно b a >= b;
18.01.2015, 12:44
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
выбери что-нибудь

Истина, если a равно b a == b;
Истина, если a не равно b a != b;
Истина, если a меньше b a < b;
Истина, если a больше b a > b;
Истина, если a меньше или равно b a <= b;
Истина, если a больше или равно b a >= b;
Уважаемый боробор, у вас опыт большой в написании, но вы меня не поняли, точнее мой вопрос, условие давно выбрано if(MA1>MA2)
напишите если не трудно в самом коде, чтобы было ясно вашу мысль?
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
18.01.2015, 12:51
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
Здравствуйте Василий!
взял с вашего советника функцию трала, но он почему то не работает, задал вопрос в другую ветку форума, но там что то неясное ответили, а может я не понял, можете глянуть сами где тут ошибка???
PHP код:
//-----------------------------------------------------------------
void Tral()
{
  for(
int i=0i<OrdersTotal(); i++) { 
    if(!(
OrderSelect(iSELECT_BY_POSMODE_TRADES))) continue; 
    if(
OrderSymbol() != Symbol()) continue;        

    if(
OrderType()==OP_BUY) { 
      if(
Bid-OrderOpenPrice()>TrailingStop*Point&&Bid>=OrderOpenPrice()+TrailingStart*Point) { 
        if(
OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point
          
OrderModify(OrderTicket(), OrderOpenPrice(),Bid-TrailingStop*PointOrderTakeProfit(), 0CLR_NONE); 
      } 
    } 

   if(
OrderType()==OP_SELL) { 
     if(
OrderOpenPrice()-Ask>TrailingStop*Point&& Ask<=OrderOpenPrice()-TrailingStart*Point) { 
        if(
OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point
         
OrderModify(OrderTicket(), OrderOpenPrice(),Ask+TrailingStop*PointOrderTakeProfit(), 0CLR_NONE); 
      }
    } 
  } 
  
}
//------------------------------------------------ 
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
18.01.2015, 14:08
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Здравствуйте Василий!
взял с вашего советника функцию трала, но он почему то не работает, задал вопрос в другую ветку форума, но там что то неясное ответили, а может я не понял, можете глянуть сами где тут ошибка???
PHP код:
//-----------------------------------------------------------------
void Tral()
{
  for(
int i=0i<OrdersTotal(); i++) { 
    if(!(
OrderSelect(iSELECT_BY_POSMODE_TRADES))) continue; 
    if(
OrderSymbol() != Symbol()) continue;        

    if(
OrderType()==OP_BUY) { 
      if(
Bid-OrderOpenPrice()>TrailingStop*Point&&Bid>=OrderOpenPrice()+TrailingStart*Point) { 
        if(
OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point
          
OrderModify(OrderTicket(), OrderOpenPrice(),Bid-TrailingStop*PointOrderTakeProfit(), 0CLR_NONE); 
      } 
    } 

   if(
OrderType()==OP_SELL) { 
     if(
OrderOpenPrice()-Ask>TrailingStop*Point&& Ask<=OrderOpenPrice()-TrailingStart*Point) { 
        if(
OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point
         
OrderModify(OrderTicket(), OrderOpenPrice(),Ask+TrailingStop*PointOrderTakeProfit(), 0CLR_NONE); 
      }
    } 
  } 
  
}
//------------------------------------------------ 

Скрытый текст

PHP код:
///////////////////////////////////////////////////////////////////////////
void Traling_Stop_f()
{
  for(
int i=0i<OrdersTotal(); i++) 
  { 
    if(
OrderSelect(iSELECT_BY_POS))
    {
    if(
OrderSymbol() == Symbol())
    {        
    if(
OrderMagicNumber()==Magic)
    {

    if(
OrderType()==OP_BUY
      { 
      if(
Bid>=NormalizeDouble(OrderOpenPrice()+TrailingStart*point+TrailingStop*point,Digits)) 
      { 
        if(
NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop+TrailingStep)*point,Digits))
        {
        if(
NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(Bid-TrailingStop*point,Digits))
        {
        while(
IsTradeContextBusy()) Sleep(int(pause_if_busy*1000));
        
RefreshRates();
          if(
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*point,Digits), OrderTakeProfit(), 0clrNONE))
          continue;
        } 
        }
      }
      } 

    if(
OrderType()==OP_SELL
      { 
      if(
Ask<=NormalizeDouble(OrderOpenPrice()-TrailingStart*point-TrailingStop*point,Digits)) 
      { 
        if((
NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(TrailingStop+TrailingStep)*point,Digits)) || OrderStopLoss()==0
        {
        if(
NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(Ask+TrailingStop*point,Digits))
        {
        while(
IsTradeContextBusy()) Sleep(int(pause_if_busy*1000));
        
RefreshRates();
          if(
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*point,Digits), OrderTakeProfit(), 0clrNONE))
          continue;
        }
        }
      }
      } 
    }
    }
    } 
  }
  

[свернуть]
23.01.2015, 08:16
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
Здравствуйте Василий!
у меня возник вопрос как разделить по магику число открытых ордеров, если в советнике использовано две ТС, то есть на каждую ТС свой магик, то как сделать так, чтобы во внешних настройках задавать максимальное число открытых ордеров независимо в каждой ТС, ниже кусок кода как я его вижу, добавьте что и как нужно в него?
ЗАРАНЕЕ СПАСИБО!

PHP код:
extern int MaxTrades1 10;
extern int MaxTrades2 10;
extern int magic1 111;
extern int magic2 333;


int start() 
{
//---------TC1------------------
if(A>B)
 {
 
OrderSend(...);
 }

//----------TC2-----------------
if(C>D)
 {
 
OrderSend(...);
 }
//-----
}
//-----------end------------- 
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
23.01.2015, 08:38
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Вы сами написали нужный код. Осталось найти кол-во ордеров с м-номерами от 1 и от 2 ТС. И сравнивать их с нужным количеством разрешенных.
Странный вопрос. ))
Кол-во ордеров по м-номеру найти просто: перебираете все и отсеиваете по условиям.
23.01.2015, 11:02
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
Вы сами написали нужный код. Осталось найти кол-во ордеров с м-номерами от 1 и от 2 ТС. И сравнивать их с нужным количеством разрешенных.
Странный вопрос. ))
Кол-во ордеров по м-номеру найти просто: перебираете все и отсеиваете по условиям.
ниче странного нету в моем вопросе, наоборот максимальная ясность, потому что приведен код, чего не могу сказать об вашем ответе, без кода как то неврубаюсь...к тому же я не хочу сложное решение, а как можно проще и короче в коде...да, я написал начало, и просил добавить что нету в моем коде...
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 23.01.2015 в 11:05.
23.01.2015, 18:05
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Код:
int i, k = OrdersTotal(), r = 0;

for(i = 0; i < k; i++)
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      if(OrderSymbol() == _Symbol)
         if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            if(OrderMagicNumber() == mn)
               r++;
Таким кодом подсчитываем ордера.
Вы же этим уже занимались. Потому мне и не понятно что тут непонятно ))
Сначала для одного mn, потом для другого.
Вот Вам и кол-во ордеров по каждому.
Milord 
31.01.2015, 13:55
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711

По умолчанию Подскажите логику работы???

PHP код:

for (int i=OrdersTotal()-1i>=0i--)
{
if (!
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if(
OrderMagicNumber()== Magic
Подскажите плиз - почему цикл начинается от OrderTotal()-1, ведь число ордеров открытых это OrderTotal(),и почему i>=0,по моему более верно будет писать i=0, и строка будет выглядеть так
for (int i=OrdersTotal(); i=0; i--)
или вот так
for (int i=OrdersTotal(); i=1; i--)
будет это верным или нет, и почему отсчет числа ордеров идет от 0, а не от 1?
в чем будет разница работы моего варианта и приведенного выше?
а также вот такого варианта работы:
for (int i=0;i<=OrdersTotal()-1;i++)
или вот такого
for (int i=1;i<=OrdersTotal();i++)

а то я чет запутался, либо сам путаюсь, либо у других ошибки в коде, поясните плиз понятнее разницу в кодах и логику работы???
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 31.01.2015 в 13:57.
31.01.2015, 14:26
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711

По умолчанию Почему тут вапще код другой???

Сегодня будем перебирать ордера
PHP код:
 1)for(int i=OrdersTotal()+1i>=0i--)
 {
 
2)OrderSelect(i,SELECT_BY_POS);
 {
 
3)if(OrderMagicNumber()==magic)
 {
 
4)if(OrderType()==OP_BUY...) OrderClose(OrderTicket(),Lot,Bid,slippage,Yellow); 
 }
 }
 } 
тут уже в коде написано
for(int i=OrdersTotal()+1; i>=0; i--)
но почему +1, а в других местах пишите -1
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
31.01.2015, 19:34
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
Если работаете на одном инструменте, то функцию можно немного упростить.

double PointsPerPip()
{
int ppp;
if (MarketInfo( Symbol(), MODE_DIGITS) == 4 ) { ppp = 1;}
else { ppp = 10; }
return (ppp);
}
или еще проще, вот так

PHP код:
double PointsPerPip()
{
 
int ppp=1;
 if (
MarketInfoSymbol(), MODE_DIGITS) == ) { ppp 10;}
 return (
ppp);

тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 31.01.2015 в 19:37.
04.02.2015, 21:00
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344

Скрытый текст

Код:
int i, k = OrdersTotal();
   
   if(BreakevenStart > 0)
   {
      double stopLossGridBr;
      if(position.type == OP_BUY)
         if(Bid - position.price > BreakevenStart * _Point && position.sl == 0)
         {
            stopLossGridBr = NormalizeDouble(position.price + BreakevenProfit * _Point, Digits);
            for(i = 0; i < k; i++)
               if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                  if(OrderSymbol() == _Symbol)
                     if(OrderMagicNumber() == magicNumber)
                        if(OrderType() == OP_BUY)
                        {
                           if(OrderStopLoss() < stopLossGridBr || OrderStopLoss() == 0)
                              ModifyOrder(-1, stopLossGridBr, -1, clrNONE);
                        }
         }
      if(position.type == OP_SELL)
         if(position.price - Ask > BreakevenStart * _Point && position.sl == 0)
         {
            stopLossGridBr = NormalizeDouble(position.price - BreakevenProfit * _Point, Digits);
            for(i = 0; i < k; i++)
               if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                  if(OrderSymbol() == _Symbol)
                     if(OrderMagicNumber() == magicNumber)
                        if(OrderType() == OP_SELL)
                        {
                           if(OrderStopLoss() > stopLossGridBr || OrderStopLoss() == 0)
                              ModifyOrder(-1, stopLossGridBr, -1, clrNONE);
                        }
         }
   }
   
   if(TrailingStart > 0)
   {
      double stopLossGridTr;
      if(position.type == OP_BUY)
         if(Bid - position.price > TrailingStart * _Point)
            if((position.sl < Bid - (TrailingStop + TrailingStep - 1) * _Point) || position.sl == 0)
            {
               stopLossGridTr = NormalizeDouble(Bid - TrailingStop * _Point, Digits);
               for(i = 0; i < k; i++)
               if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                  if(OrderSymbol() == _Symbol)
                     if(OrderMagicNumber() == magicNumber)
                        if(OrderType() == OP_BUY)
                        {
                           if(OrderStopLoss() < stopLossGridTr || OrderStopLoss() == 0)
                              ModifyOrder(-1, stopLossGridTr, -1, clrNONE);
                        }
            }
      if(position.type == OP_SELL)
         if(position.price - Ask > TrailingStart * _Point)
            if((position.sl > Ask + (TrailingStop + TrailingStep - 1) * _Point) || position.sl == 0)
            {
               stopLossGridTr = NormalizeDouble(Ask + TrailingStop * _Point, Digits);
               for(i = 0; i < k; i++)
               if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                  if(OrderSymbol() == _Symbol)
                     if(OrderMagicNumber() == magicNumber)
                        if(OrderType() == OP_SELL)
                        {
                           if(OrderStopLoss() > stopLossGridTr || OrderStopLoss() == 0)
                              ModifyOrder(-1, stopLossGridTr, -1, clrNONE);
                        }
            }
[свернуть]

Вместо модификации запомни в переменную.
18.02.2015, 10:56
Аватар для Fractlr
Fractlr Fractlr вне форума Новичок форума
Регистрация: 15.12.2014 / Сообщений: 23
Поблагодарили 16 раз(а) / Репутация: 17
Buenos dias:
Podria por favor explicarme como programar un "Reverse Trade"; es decir si BUY-->SELL y al reves?
Gracias
18.03.2015, 14:19
Регистрация: 05.10.2010 / Адрес: тут недалеко / Сообщений: 1,352
Поблагодарили 9,953 раз(а) / Репутация: 9953
Господа знатоки, подскажите наверняка для вас простую вещь )))
Каким образом можно заменить символ, отображаемый индюком из Windings на похожий из Windings3, к примеру ? Есть общее решение ?
16.04.2015, 03:55
Аватар для ron2009
ron2009 ron2009 вне форума Активный участник
Регистрация: 03.04.2014 / Адрес: Владивосток / Сообщений: 104
Поблагодарили 77 раз(а) / Репутация: 78

По умолчанию Какой пароль на видеокурс,

Для лучшего понимания скачайте видеокурс по программированию
_http://file.karelia.ru/zrz98j/
Неподскажите какой пароль на архив этого видеокурса. Я скачал а разархировать не могу. Пароль просит.
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 10:44. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO