Ответить
05.12.2012, 09:06
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
прет,
хотел сделать чтоб робот работал после открытия ордера вручную и вел дальше...
какой меджик прописать чтоб он определял и вел их дальше правильно? 0?
Правильно, но хотя-бы проверку по символу сделай.
eevviill , Ugar 
05.12.2012, 09:08
Аватар для vetallic
vetallic vetallic вне форума Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
проверку прошел, я ему номер присвоил, терь просто убрать хочу...
05.12.2012, 10:17
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
проверку прошел, я ему номер присвоил, терь просто убрать хочу...
Ему, это кому? И что убрать хочешь???
Ugar 
05.12.2012, 10:53
Аватар для vetallic
vetallic vetallic вне форума Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
состряпал робота прогнал все ок, просто надо чтоб 1й ордер ручной учитывал...
06.12.2012, 12:04
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Привет всем. Преобразовал сов из mql4 в mql5. И при компиляции пишет две ошибки
unexpected end of program - показывает на самую последнюю закрываемую скобку}
unbalanced parentheses - показывает на начало int OnInit() {
Может кто-нибудь подсказать, это возможно исправить?
06.12.2012, 16:45
Аватар для Energetik777
Energetik777 Energetik777 вне форума Активный участник
Регистрация: 17.07.2011 / Сообщений: 70
Поблагодарили 39 раз(а) / Репутация: 40
Сообщение от: Алекc1234
Привет всем. Преобразовал сов из mql4 в mql5. И при компиляции пишет две ошибки
unexpected end of program - показывает на самую последнюю закрываемую скобку}
unbalanced parentheses - показывает на начало int OnInit() {
Может кто-нибудь подсказать, это возможно исправить?
Количество фигурных скобок вручную проверь, либо где-то лишняя, либо не хватает.
06.12.2012, 16:49
Аватар для sochinik
sochinik sochinik вне форума Активный участник
Регистрация: 10.05.2012 / Адрес: Курск-Краснодар / Сообщений: 326
Поблагодарили 169 раз(а) / Репутация: 170
  • Отправить сообщение для sochinik с помощью ICQ Отправить сообщение для sochinik с помощью MSN Отправить сообщение для sochinik с помощью Skype™
Сообщение от: Energetik777
Количество фигурных скобок вручную проверь, либо где-то лишняя, либо не хватает.
В Notepad++ есть возможность проверить парность скобок и верность блоков...
06.12.2012, 17:19
Аватар для ale002
ale002 ale002 вне форума ::: __,,,^._.^,,,__ :::
Регистрация: 28.02.2010 / Сообщений: 1,246
Поблагодарили 2,504 раз(а) / Репутация: 2530
В MetaEditor 5 парные скобки и так подсвечиваются. Он вообще ощутимо удобней
06.12.2012, 20:41
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Вот функции открытия ордеров байлимит и селлимит и сама торговая функция:

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

PHP код:
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
int OpenBuy()
{
  
g_ticket = -1;
  
string myNote "сов баянул";
         
  
g_ticket OrderSend(Symbol(),OP_BUYLIMIT,0.1,GetPriceToInput(),3,0,0,myNote,myMagic,0,Blue);
  return(
g_ticket);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
int OpenSell()
{
  
g_ticket = -1;
  
string myNote "сов шортанул";

  
g_ticket OrderSend(Symbol(),OP_SELLLIMIT,0.1,GetPriceToInput(),3,0,0,myNote,myMagic,0,Red);
  return(
g_ticket);
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade (int signal)
{
  
double sl 0tp 0;

  if(
signal == SIGNAL_BUY && FindOrders() == 0)
  {
    
g_ticket OpenBuy();
  }
  if(
OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  {
    if(
i_sl 0)
      
sl NormalizeDouble(OrderOpenPrice() - i_sl*Point,Digits);
    if(
i_tp 0)
      
tp NormalizeDouble(OrderOpenPrice() + i_tp*Point,Digits);
  
  Print(
"slb = "sl); Print("tpb = "tp);
      
    if(
OrderTakeProfit() == && OrderStopLoss() == 0)
    {
      if((
tp OrderOpenPrice() >= g_stopLevel) && (OrderOpenPrice() - sl >= g_stopLevel))
      Print(
"slb_cor = "sl); Print("tpb_cor = "tp);
      {
       
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);
       return(
true);
      }
    }
  }  
    
    
  if(
signal == SIGNAL_SELL && FindOrders() == 0)
  {
    
g_ticket OpenSell();
  }
  
  if(
OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  {
    if(
i_sl 0)
       
sl NormalizeDouble(OrderOpenPrice() + i_sl*Point,Digits);
    if(
i_tp 0)
       
tp NormalizeDouble(OrderOpenPrice() - i_tp*Point,Digits);

       Print(
"slb = "sl); Print("tpb = "tp);
       Print(
"OrderTakeProfit() = "OrderTakeProfit()); Print("OrderStopLoss() = "OrderStopLoss());

    if(
OrderTakeProfit() == && OrderStopLoss() == 0)
    {
      if((
OrderOpenPrice() - tp >= g_stopLevel) && (sl OrderOpenPrice() >= g_stopLevel))
      Print(
"sls_cor = "sl); Print("tps_cor = "tp);
      {
        
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);
        return(
true);
      }
    }
  }
return(
true);

[свернуть]



Суть такая. Чтоб советник то работает, но раз за разом вылазит ошибка 130
Согласно справке это неверные стопы. Но я прогоняю в визуале и принтовал, стопы вполне адекватные. Что тут может быть не так?
Функцию я написал вроде как правильно и логично всё.

Здесь g_stopLevel - это стоплевел есс-но.
i_sl и i_tp - это вводные СтопЛосс и ТейкПрофит.

Последний раз редактировалось NSerega; 06.12.2012 в 23:19.
06.12.2012, 21:00
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

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

...
Суть такая. Чтоб советник то работает, но раз за разом вылазит ошибка 130
Согласно справке это неверные стопы. Но я прогоняю в визуале и принтовал, стопы вполне адекватные. Что тут может быть не так?
Функцию я написал вроде как правильно и логично всё.

Здесь g_stopLevel - это стоплевел есс-но.
i_sl и i_tp - это вводные СтопЛосс и ТейкПрофит.
Стопы это не только стопы, но и цены отложек. Скорее всего ты выставляешь или слишком близко к цене или не в той стороне(байстоп ниже цены).
06.12.2012, 21:59
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Стопы это не только стопы, но и цены отложек. Скорее всего ты выставляешь или слишком близко к цене или не в той стороне(байстоп ниже цены).
Слишком близко к цене не может быть, т.к. у меня условие же есть:

PHP код:
if(OrderTakeProfit() == && OrderStopLoss() == 0)
    {
      if((
tp OrderOpenPrice() >= g_stopLevel) && (OrderOpenPrice() - sl >= g_stopLevel))
      {
       
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);
       return(
true);
      }
    } 
Вот тут сравниевается же ТП и СЛ с g_stopLevel т.е. со стоплевелом.

Я распринтовал ф-цию целиком, что ещё не принтовал, и, оказалось, что в проверке:

PHP код:
if(OrderTakeProfit() == && OrderStopLoss() == 0
Уже что-то не то. Суть в том, что в коде больше нигде до этого не упоминается про эти переменные, а когда я их распринтовал то на выходе получил в журнале:

Код:
2012.12.06 23:13:56	2008.12.09 10:23  Gann_2Days GBPUSD,H1: OrderStopLoss() = 1.5039
2012.12.06 23:13:56	2008.12.09 10:23  Gann_2Days GBPUSD,H1: OrderTakeProfit() = 1.4949
Это странно очень. Такое разве бывает, что значение какой-н. переменной всплывает какое-н., когда её не объявляли?
06.12.2012, 22:35
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
В общем-то я покопался и понял, где косяк. Вот добавил в начале ф-ции специально переменные OSL и OSL, и обнулил эти значение.

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

PHP код:
bool Trade (int signal)
{
  
double OSL OrderStopLoss();
  
double OTP OrderTakeProfit();
  
double sl 0tp 0;
  
OSL 0OTP 0;
  
  Print(
"OSL = "OSL); Print("OTP = "OTP);
  Print(
"OrderTakeProfit() = "OrderTakeProfit()); Print("OrderStopLoss() = "OrderStopLoss()); 
[свернуть]



Далее начинается самое интересно! Я принтую как переменные так и полные названия соответствующих им ф-ций и вижу:

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

PHP код:
2012.12.07 00:27:54    2008.12.05 00:03  Gann_2Days GBPUSD,H1open #1 buy limit 0.10 GBPUSD at 1.46425 ok
2012.12.07 00:27:54    2008.12.05 00:03  Gann_2Days GBPUSD,H1OrderStopLoss() = 1.4639
2012.12.07 00
:27:54    2008.12.05 00:03  Gann_2Days GBPUSD,H1OrderTakeProfit() = 1.4729
2012.12.07 00
:27:54    2008.12.05 00:03  Gann_2Days GBPUSD,H1OTP 0
2012.12.07 00
:27:54    2008.12.05 00:03  Gann_2Days GBPUSD,H1OSL 0
2012.12.07 00
:27:51    Gann_2Days inputsi_sl=450i_tp=450i_momTF=60i_momPeriod=18
[свернуть]



Что это такое? Глюки МТ4 ?

По логике должно распринтовать одинаковые значения для OrderStopLoss() и OSL, и, соответственно, для OrderTakeProfit() и OTP.

Последний раз редактировалось NSerega; 06.12.2012 в 23:19.
07.12.2012, 09:10
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
В общем-то я покопался и понял, где косяк. Вот добавил в начале ф-ции специально переменные OSL и OSL, и обнулил эти значение.


double OSL = OrderStopLoss();
double OTP = OrderTakeProfit();
double sl = 0, tp = 0;
OSL = 0; OTP = 0;

Print("OSL = ", OSL); Print("OTP = ", OTP);
Print("OrderTakeProfit() = ", OrderTakeProfit()); Print("OrderStopLoss() = ", OrderStopLoss());


Далее начинается самое интересно! Я принтую как переменные так и полные названия соответствующих им ф-ций и вижу:

Что это такое? Глюки МТ4 ?

По логике должно распринтовать одинаковые значения для OrderStopLoss() и OSL, и, соответственно, для OrderTakeProfit() и OTP.
Глюки в голове. Чё написал то и принтуется. Сам же обнулил значения OSL и OTP, с чего они вдруг должны быть равны OrderStopLoss() и OrderTakeProfit() ?
Сам себя запутываешь, а потом ищешь глюки в МТ4.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 07.12.2012 в 09:13.
07.12.2012, 11:12
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Глюки в голове. Чё написал то и принтуется. Сам же обнулил значения OSL и OTP, с чего они вдруг должны быть равны OrderStopLoss() и OrderTakeProfit() ?
Сам себя запутываешь, а потом ищешь глюки в МТ4.
Поздно писал, ошибся. Но тут возникает момент. Вот так сделать нельзя:

PHP код:
bool Trade (int signal)
{
  
double OSL 0;
  
double OTP 0;
  
OrderStopLoss() = OSL;
  
//double OTP = OrderTakeProfit();
  
double sl 0tp 0;
  
  Print(
"OSL = "OSL); Print("OTP = "OTP);
  Print(
"OrderTakeProfit() = "OrderTakeProfit()); Print("OrderStopLoss() = "OrderStopLoss()); 

Т.е. присвоить значение переменной OrderStopLoss() значение переменной OSL. Так же нет возможности обнулить значение переменной, т.е.:

Код:
OrderStopLoss()

Так написать неверно, т.к. не компилится в таком виде.
Но на входу у меня OrderStopLoss() и OrderTakeProfit() уже имею значения, которые им не давались по коду выше. Как мне их обнулить тогда?
07.12.2012, 11:26
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Поздно писал, ошибся. Но тут возникает момент. Вот так сделать нельзя:

PHP код:
bool Trade (int signal)
{
  
double OSL 0;
  
double OTP 0;
  
OrderStopLoss() = OSL;
  
//double OTP = OrderTakeProfit();
  
double sl 0tp 0;
  
  Print(
"OSL = "OSL); Print("OTP = "OTP);
  Print(
"OrderTakeProfit() = "OrderTakeProfit()); Print("OrderStopLoss() = "OrderStopLoss()); 
Т.е. присвоить значение переменной OrderStopLoss() значение переменной OSL. Так же нет возможности обнулить значение переменной, т.е.:

Код:
OrderStopLoss()
Так написать неверно, т.к. не компилится в таком виде.
Но на входу у меня OrderStopLoss() и OrderTakeProfit() уже имею значения, которые им не давались по коду выше. Как мне их обнулить тогда?
Никак нельзя обнулить переменные OrderStopLoss() и OrderTakeProfit(). Хотя бы потому что это не переменные, а функци. Они возвращают значения стоп лосс и тейк профит выбранного ордера. Что бы они возвращали 0, нужно предварительно выбрать ордер без стоп лосс и тейк профит уровней.
Может стоит сначала заглянуть в справочник, а лучше в учебник? Пожалуй для того кто путает функции с переменными, стоит начинать с учебника. А про пользовательские функции стоит вообще пока забыть. Вот когда будет написано куча программ и в них будут часто использоваться одинаковые куски кода, много кратно проверенные и отлаженные, стоит подумать о выделении их в функции и библиотеки.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
07.12.2012, 11:37
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Никак нельзя обнулить переменные OrderStopLoss() и OrderTakeProfit(). Хотя бы потому что это не переменные, а функци. Они возвращают значения стоп лосс и тейк профит выбранного ордера. Что бы они возвращали 0, нужно предварительно выбрать ордер без стоп лосс и тейк профит уровней.
Может стоит сначала заглянуть в справочник, а лучше в учебник? Пожалуй для того кто путает функции с переменными, стоит начинать с учебника. А про пользовательские функции стоит вообще пока забыть. Вот когда будет написано куча программ и в них будут часто использоваться одинаковые куски кода, много кратно проверенные и отлаженные, стоит подумать о выделении их в функции и библиотеки.

Учебник я уже перечитал несколько раз, то что там есть уже в курсе. То что это функция я понимаю, написал неверно просто поспешке. У меня выделены ордера канкретно без ТП и без СЛ. Но всё равно откуда-то появляются значения у OrderStopLoss() и OrderTakeProfit().

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

PHP код:
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade (int signal)
{
  
double sl 0tp 0;
  
  Print(
"OrderTakeProfit() = "OrderTakeProfit()); Print("OrderStopLoss() = "OrderStopLoss());

  if(
signal == SIGNAL_BUY && FindOrders() < 5)
  {
    
g_ticket OpenBuy();
  }
  if(
OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  {
    if(
i_sl 0)
      
sl NormalizeDouble(OrderOpenPrice() - i_sl*Point,Digits);
    if(
i_tp 0)
      
tp NormalizeDouble(OrderOpenPrice() + i_tp*Point,Digits);
  
 
// Print("slb = ", sl); Print("tpb = ", tp);
    
 //   Print("OrderTakeProfit() = ", OrderTakeProfit()); Print("OrderStopLoss() = ", OrderStopLoss());  
    
if(OrderTakeProfit() == && OrderStopLoss() == 0)
    {
      if((
tp OrderOpenPrice() >= g_stopLevel) && (OrderOpenPrice() - sl >= g_stopLevel))
      Print(
"slb_cor = "sl); Print("tpb_cor = "tp);
      {
       
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);
       return(
true);
      }
    }
  }  
    
    
  if(
signal == SIGNAL_SELL && FindOrders() < 5)
  {
    
g_ticket OpenSell();
  }
  
  if(
OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  {
    if(
i_sl 0)
       
sl NormalizeDouble(OrderOpenPrice() + i_sl*Point,Digits);
    if(
i_tp 0)
       
tp NormalizeDouble(OrderOpenPrice() - i_tp*Point,Digits);

       Print(
"slb = "sl); Print("tpb = "tp);
     
//  Print("OrderTakeProfit() = ", OrderTakeProfit()); Print("OrderStopLoss() = ", OrderStopLoss());

    
if(OrderTakeProfit() == && OrderStopLoss() == 0)
    {
      if((
OrderOpenPrice() - tp >= g_stopLevel) && (sl OrderOpenPrice() >= g_stopLevel))
      Print(
"sls_cor = "sl); Print("tps_cor = "tp);
      {
        
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);
        return(
true);
      }
    }
  }
return(
true);

А Вот сами OpenBuy() и OpenSell():

PHP код:
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
int OpenBuy()
{
  
g_ticket = -1;
  
string myNote "сов баянул";
         
  
g_ticket OrderSend(Symbol(),OP_BUYLIMIT,0.1,GetPriceToInput(),3,0,0,myNote,myMagic,0,Blue);
  return(
g_ticket);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
int OpenSell()
{
  
g_ticket = -1;
  
string myNote "сов шортанул";

  
g_ticket OrderSend(Symbol(),OP_SELLLIMIT,0.1,GetPriceToInput(),3,0,0,myNote,myMagic,0,Red);
  return(
g_ticket);

[свернуть]

Всё написано чётко с пониманием. В коде видно. Тейк и Стоп по нулям при открытии... Тем не менее откуда не возьмись они появились.

Последний раз редактировалось chocolate; 07.12.2012 в 12:23.
07.12.2012, 11:55
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
В справочнике написано:
Цитата:
double OrderStopLoss( )Возвращает значение цены закрытия позиции при достижении уровня убыточности (stop loss) для текущего выбранного ордера.
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
07.12.2012, 12:59
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Странно. Я то логику понимаю. Но они же и так были выбраны, все условия были внутри ф-ции OrderSelect() у меня изначально. Вот первый вариант:

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

PHP код:
if(signal == SIGNAL_BUY && FindOrders() < 5)
  {
    
g_ticket OpenBuy();
  }
  if(
OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  {
    if(
i_sl 0)
      
sl NormalizeDouble(OrderOpenPrice() - i_sl*Point,Digits);
    if(
i_tp 0)
      
tp NormalizeDouble(OrderOpenPrice() + i_tp*Point,Digits);
  
 
// Print("slb = ", sl); Print("tpb = ", tp);
    
 //   Print("OrderTakeProfit() = ", OrderTakeProfit()); Print("OrderStopLoss() = ", OrderStopLoss());  
    
if(OrderTakeProfit() == && OrderStopLoss() == 0)
    {
      if((
tp OrderOpenPrice() >= g_stopLevel) && (OrderOpenPrice() - sl >= g_stopLevel))
      Print(
"slb_cor = "sl); Print("tpb_cor = "tp);
      {
       
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);
       return(
true);
      }
    }
  } 
[свернуть]


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


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

PHP код:
if(signal == SIGNAL_BUY && FindOrders() < 5)
  {
    
g_ticket OpenBuy();
  }
  if(
OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  {
    if(
i_sl 0)
      
sl NormalizeDouble(OrderOpenPrice() - i_sl*Point,Digits);
    if(
i_tp 0)
      
tp NormalizeDouble(OrderOpenPrice() + i_tp*Point,Digits);
  
 
// Print("slb = ", sl); Print("tpb = ", tp);
    
 //   Print("OrderTakeProfit() = ", OrderTakeProfit()); Print("OrderStopLoss() = ", OrderStopLoss());  
    
if(OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
    {
      if(
OrderTakeProfit() == && OrderStopLoss() == 0)
      {
        if((
tp OrderOpenPrice() >= g_stopLevel) && (OrderOpenPrice() - sl >= g_stopLevel))
        Print(
"slb_cor = "sl); Print("tpb_cor = "tp);
        {
          
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);
          return(
true);
        }
      }
    }
  `

[свернуть]

Последний раз редактировалось NSerega; 08.12.2012 в 15:59.
07.12.2012, 15:51
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
А если 10 раз выбрать один и тот же ордер, может советник станет в 10 раз прибыльней? И пользовательских функций надо побольше наплодить, что бы каждая из другой вызывалась, тогда точно будет печатать баксы быстрее ФРС.
Сам себя запутываешь. Пиши максимально просто, что бы сам понимал что написал.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 07.12.2012 в 15:53.
08.12.2012, 13:12
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
А если 10 раз выбрать один и тот же ордер, может советник станет в 10 раз прибыльней? И пользовательских функций надо побольше наплодить, что бы каждая из другой вызывалась, тогда точно будет печатать баксы быстрее ФРС.
Сам себя запутываешь. Пиши максимально просто, что бы сам понимал что написал.
Ugar, ты же меня сам запутал У меня же и до того были выбраны ордера, которые в последствии по коду модифицируются.
Вот я всё исправил в данной функции. Всё лишнее пока что убрал. Ошибка 130 всё-равно на месте. Может есть что посоветовать? Читать учебник одно, а практике это уже другое.

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

PHP код:
bool Trade (int signal)
{
  
double sl 0tp 0;
  
  Print(
"OrderTakeProfit() = "OrderTakeProfit()); Print("OrderStopLoss() = "OrderStopLoss());

  if(
signal == SIGNAL_BUY && FindOrders() == 0)
  {
    
g_ticket OpenBuy();
  
    if(
g_ticket && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
    {
      if(
i_sl != 0)
        
sl NormalizeDouble(OrderOpenPrice() - i_sl*Point,Digits);
      if(
i_tp != 0)
        
tp NormalizeDouble(OrderOpenPrice() + i_tp*Point,Digits);
    }  
  }  
  else if(
signal == SIGNAL_SELL && FindOrders() == 0)
  {
    
g_ticket OpenSell();
  
    if(
g_ticket && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
    {
      if(
i_sl != 0)
         
sl NormalizeDouble(OrderOpenPrice() + i_sl*Point,Digits);
      if(
i_tp != 0)
         
tp NormalizeDouble(OrderOpenPrice() - i_tp*Point,Digits);
    }
  }
  if(
sl != || tp != 0)
  {
    
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);
    return(
true);
  }
return(
true);

[свернуть]

Последний раз редактировалось NSerega; 08.12.2012 в 15:59.
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

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

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



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


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