Ответ
 
Опции темы
Старый 05.12.2012, 09:06   #621 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от vetallic Посмотреть сообщение
прет,
хотел сделать чтоб робот работал после открытия ордера вручную и вел дальше...
какой меджик прописать чтоб он определял и вел их дальше правильно? 0?
Правильно, но хотя-бы проверку по символу сделай.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (05.12.2012), Ugar (11.12.2012)
Старый 05.12.2012, 09:08   #622 (permalink)
Местный знаток
 
Аватар для vetallic
 
Регистрация: 31.08.2010
Сообщений: 352
Репутация: 511
vetallic - vetallic - vetallic - vetallic - vetallic - vetallic -
Сказал(а) спасибо: 87
Поблагодарили 509 раз(а) в 104 сообщениях
Поинты: 96
проверку прошел, я ему номер присвоил, терь просто убрать хочу...
vetallic вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.12.2012, 10:17   #623 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от vetallic Посмотреть сообщение
проверку прошел, я ему номер присвоил, терь просто убрать хочу...
Ему, это кому? И что убрать хочешь???
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Ugar (11.12.2012)
Старый 05.12.2012, 10:53   #624 (permalink)
Местный знаток
 
Аватар для vetallic
 
Регистрация: 31.08.2010
Сообщений: 352
Репутация: 511
vetallic - vetallic - vetallic - vetallic - vetallic - vetallic -
Сказал(а) спасибо: 87
Поблагодарили 509 раз(а) в 104 сообщениях
Поинты: 96
состряпал робота прогнал все ок, просто надо чтоб 1й ордер ручной учитывал...
vetallic вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 06.12.2012, 12:04   #625 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Привет всем. Преобразовал сов из mql4 в mql5. И при компиляции пишет две ошибки
unexpected end of program - показывает на самую последнюю закрываемую скобку}
unbalanced parentheses - показывает на начало int OnInit() {
Может кто-нибудь подсказать, это возможно исправить?
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 06.12.2012, 16:45   #626 (permalink)
Активный участник
 
Аватар для Energetik777
 
Регистрация: 17.07.2011
Сообщений: 70
Репутация: 40
Energetik777
Сказал(а) спасибо: 23
Поблагодарили 39 раз(а) в 26 сообщениях
Поинты: 6
Сообщение от Алекc1234 Посмотреть сообщение
Привет всем. Преобразовал сов из mql4 в mql5. И при компиляции пишет две ошибки
unexpected end of program - показывает на самую последнюю закрываемую скобку}
unbalanced parentheses - показывает на начало int OnInit() {
Может кто-нибудь подсказать, это возможно исправить?
Количество фигурных скобок вручную проверь, либо где-то лишняя, либо не хватает.
Energetik777 на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Алекc1234 (06.12.2012)
Старый 06.12.2012, 16:49   #627 (permalink)
Активный участник
 
Аватар для sochinik
 
Регистрация: 10.05.2012
Адрес: Курск-Краснодар
Сообщений: 326
Репутация: 170
sochinik - sochinik -
Сказал(а) спасибо: 142
Поблагодарили 169 раз(а) в 65 сообщениях
Поинты: 254
Отправить сообщение для sochinik с помощью ICQ Отправить сообщение для sochinik с помощью MSN Отправить сообщение для sochinik с помощью Skype™
Сообщение от Energetik777 Посмотреть сообщение
Количество фигурных скобок вручную проверь, либо где-то лишняя, либо не хватает.
В Notepad++ есть возможность проверить парность скобок и верность блоков...
sochinik вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Алекc1234 (06.12.2012)
Старый 06.12.2012, 17:19   #628 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
В MetaEditor 5 парные скобки и так подсвечиваются. Он вообще ощутимо удобней
ale002 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (06.12.2012)
Старый 06.12.2012, 20:41   #629 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для 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.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 06.12.2012, 21:00   #630 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от hoz Посмотреть сообщение
Вот функции открытия ордеров байлимит и селлимит и сама торговая функция:

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

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

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
Это странно очень. Такое разве бывает, что значение какой-н. переменной всплывает какое-н., когда её не объявляли?
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 06.12.2012, 22:35   #632 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для 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.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 07.12.2012, 09:10   #633 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1966
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,895 раз(а) в 1,071 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от hoz Посмотреть сообщение
В общем-то я покопался и понял, где косяк. Вот добавил в начале ф-ции специально переменные 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.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (07.12.2012)
Старый 07.12.2012, 11:12   #634 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от Ugar Посмотреть сообщение
Глюки в голове. Чё написал то и принтуется. Сам же обнулил значения 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() уже имею значения, которые им не давались по коду выше. Как мне их обнулить тогда?
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 07.12.2012, 11:26   #635 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1966
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,895 раз(а) в 1,071 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от hoz Посмотреть сообщение
Поздно писал, ошибся. Но тут возникает момент. Вот так сделать нельзя:

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
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (07.12.2012)
Старый 07.12.2012, 11:37   #636 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от Ugar Посмотреть сообщение
Никак нельзя обнулить переменные 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.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 07.12.2012, 11:55   #637 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1966
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,895 раз(а) в 1,071 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
В справочнике написано:
Цитата:
double OrderStopLoss( )Возвращает значение цены закрытия позиции при достижении уровня убыточности (stop loss) для текущего выбранного ордера.
Ордер должен быть предварительно выбран с помощью функции OrderSelect().

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (07.12.2012)
Старый 07.12.2012, 12:59   #638 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для 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.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 07.12.2012, 15:51   #639 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1966
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,895 раз(а) в 1,071 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
А если 10 раз выбрать один и тот же ордер, может советник станет в 10 раз прибыльней? И пользовательских функций надо побольше наплодить, что бы каждая из другой вызывалась, тогда точно будет печатать баксы быстрее ФРС.
Сам себя запутываешь. Пиши максимально просто, что бы сам понимал что написал.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 07.12.2012 в 15:53.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
alexshell (07.12.2012), eevviill (07.12.2012)
Старый 08.12.2012, 13:12   #640 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от Ugar Посмотреть сообщение
А если 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.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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