Ответ
 
Опции темы
Старый 08.12.2012, 15:58   #641 (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 Посмотреть сообщение
Ugar, ты же меня сам запутал У меня же и до того были выбраны ордера, которые в последствии по коду модифицируются.
Да ну. Где же я тебя запутал? Где же ты выбрал ордер? Речь изначально шла о том что принтуется.
Я вижу что в начале функции принтуешь значения OrderStopLoss() и OrderTakeProfit(), но не вижу где перед этим был выбран ордер. Где то до вызова этой функции? Так надо было показать этот кусок кода.
Я вижу что выбор ордера идёт дальше по коду, же после открытия. Вот после этого и надо использовать OrderStopLoss() и OrderTakeProfit().
Сообщение от hoz Посмотреть сообщение
Вот я всё исправил в данной функции. Всё лишнее пока что убрал. Ошибка 130 всё-равно на месте. Может есть что посоветовать? Читать учебник одно, а практике это уже другое.
Ошибки в работе этой функции меня не удивляют. А какая практика то нужна? Как построить код что бы никто не понял? Как использовать пользовательскую функцию внутри другой? Я же не знаю в чём ты практикуешься? Я давал советы как проще начать, но видать проще не надо. Видать надо так что бы сам ничего не понял. Тогда ковыряй декомпилы, веселее будет.
Я иногда пишу, если заказчик просит, запутанные коды. Жаль что они все коммерческие, а то бы поделился. Там так запутано, что даже опытные программисты, от одного вида начинают разговаривать матом.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 08.12.2012, 16:14   #642 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от Ugar Посмотреть сообщение
Да ну. Где же я тебя запутал? Где же ты выбрал ордер? Речь изначально шла о том что принтуется.
Я вижу что в начале функции принтуешь значения OrderStopLoss() и OrderTakeProfit(), но не вижу где перед этим был выбран ордер. Где то до вызова этой функции? Так надо было показать этот кусок кода.
Я вижу что выбор ордера идёт дальше по коду, же после открытия. Вот после этого и надо использовать OrderStopLoss() и OrderTakeProfit().

Ошибки в работе этой функции меня не удивляют. А какая практика то нужна? Как построить код что бы никто не понял? Как использовать пользовательскую функцию внутри другой? Я же не знаю в чём ты практикуешься? Я давал советы как проще начать, но видать проще не надо. Видать надо так что бы сам ничего не понял. Тогда ковыряй декомпилы, веселее будет.
Я иногда пишу, если заказчик просит, запутанные коды. Жаль что они все коммерческие, а то бы поделился. Там так запутано, что даже опытные программисты, от одного вида начинают разговаривать матом.
Где запутал смысла писать уже нет. Но что я сложного написал это вопрос точно. Тут всё просто. Даже комменты есть.. Специально написал комменты, что б было видно, что происходит в каждом канкретном моменте:

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

PHP код:
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
int OpenBuy()
{
  
g_ticket = -1;
  
string myNote "сов баянул";
         
  
g_ticket OrderSend(Symbol(),OP_BUYLIMIT,0.1,GetPriceToInput(),3,0,0,myNote,myMagic,0,Blue);
  if(
g_ticket && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  
  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);
  if(
g_ticket && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  
  return(
g_ticket);
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade (int signal)
{
  
double sl 0tp 0;

  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)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
        
sl NormalizeDouble(OrderOpenPrice() - i_sl*Point,Digits);                 // Получаем значение стоп-лосса для выбранного ордера
      
if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 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)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
         
sl NormalizeDouble(OrderOpenPrice() + i_sl*Point,Digits);                // Получаем значение стоп-лосса для выбранного ордера
      
if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
         
tp NormalizeDouble(OrderOpenPrice() - i_tp*Point,Digits);                // Получаем значение тейкпрофита для выбранного ордера
    
}
  }
  if(
sl != || tp != 0)                                                            // Если полученные значения sl и tp не равныы 0, то..
  
{
    
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
    
return(true);
  }
  return(
true);

[свернуть]


Декомпилы я не ковыряю, писал всё сам. Попросил подсказать, где есть неверность. А в ответ, что ничего не понятно... Что может быть тут не понятно вообще?
Теперешний вариант уже вполне верный, ведь всё прокомментировано.

Последний раз редактировалось NSerega; 08.12.2012 в 17:57.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 08.12.2012, 18:05   #643 (permalink)
Заблокирован
 
Аватар для berlios
 
Регистрация: 15.09.2012
Сообщений: 3
Репутация: 1
berlios
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Братцы, помогите неДОобразованному.
Есть вот такой индикатор.
Мне надо :
1. Сделать из него функцию.
2. Там есть такая строка, в которой явно указана Close :
indx = (kk - factor) * (Close[Len - kk + i]);
Как мне прописать, чтоб с помощью входных параметров я мог выбирать что-нить другое,
например High или другую переменную (вместо Close), например :
double PlusDI1 = iADX(Symbol(), 0, ADXPeriod, ADXPrice, MODE_PLUSDI, 1);
3. Как вызывать эту функцию, например для другого индикатора.

Премного благодарен.

// ---------------------------------------------------

#property indicator_chart_window
#property indicator_buffers 1

#property indicator_color1 Aqua

extern int Length = 15;

int limit;
int Len;
double factor;
double indx;
double IndBuffer[];
double sumDB[];


int init() {
IndicatorBuffers(2);
SetIndexBuffer(0, IndBuffer);
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 1);

SetIndexBuffer(1, sumDB);

return (0);
}

int start() {
limit = Bars - Length - 5;
Len = Length;

for (int i = limit - Len - 1; i >= 0; i--) {

sumDB[1] = 0;
for (int kk = Len; kk >= 1; kk--) {
factor = Len + 1;
factor /= 3.0;
indx = 0;
indx = (kk - factor) * (Close[Len - kk + i]);
sumDB[1] += indx;
}

IndBuffer[i] = 6.0 * sumDB[1] / (Len * (Len + 1));

}

return (0);
}
berlios вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 08.12.2012, 19:21   #644 (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 код:
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
int OpenBuy()
{
  
g_ticket = -1;
  
string myNote "сов баянул";
         
  
g_ticket OrderSend(Symbol(),OP_BUYLIMIT,0.1,GetPriceToInput(),3,0,0,myNote,myMagic,0,Blue);
  if(
g_ticket && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  
  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);
  if(
g_ticket && OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  
  return(
g_ticket);
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade (int signal)
{
  
double sl 0tp 0;

  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)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
        
sl NormalizeDouble(OrderOpenPrice() - i_sl*Point,Digits);                 // Получаем значение стоп-лосса для выбранного ордера
      
if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 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)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
         
sl NormalizeDouble(OrderOpenPrice() + i_sl*Point,Digits);                // Получаем значение стоп-лосса для выбранного ордера
      
if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
         
tp NormalizeDouble(OrderOpenPrice() - i_tp*Point,Digits);                // Получаем значение тейкпрофита для выбранного ордера
    
}
  }
  if(
sl != || tp != 0)                                                            // Если полученные значения sl и tp не равныы 0, то..
  
{
    
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
    
return(true);
  }
  return(
true);

[свернуть]


Декомпилы я не ковыряю, писал всё сам. Попросил подсказать, где есть неверность. А в ответ, что ничего не понятно... Что может быть тут не понятно вообще?
Теперешний вариант уже вполне верный, ведь всё прокомментировано.
Для меня ничего сложного нет. По крайней мере мне эти комментарии не нужны. Есть куча косяков и засекреченные функции. Так же нет прозрачности обмена данными между ними.
Сложности не у меня. У меня функции свои, их коды мне понятны, к каждой есть комментарии по особенностям применения, обмен данными прозрачен. При комбинировании функций лишних операций нет. Если применение готовых пользовательских функций приводит к лишним операциям и вычислениям, я лучше напишу без них. Такой дурью, как использование функций ради использования функций, я не страдаю.
Может кто то дугой поможет. Я устал объяснять.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (08.12.2012)
Старый 08.12.2012, 20:48   #645 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от Ugar Посмотреть сообщение
Сложности не у меня.

Похоже есть.. Я уже всё исправил, а ответ был прост. Но некоторые люди то ли понты колотят, то ли ещё что-то, вместо того, чтобы сказать что-то конкретно.
То что у тебя всё там прозрачно это лишь слова. А по факту я этого не видел, так что разговор об этом будет не обоснован вовсе.
Тут каждый может прийти, сказать, что " у тебя кривой код", а " у тебя код не внятный", а " у тебя .. ещё что-н.", а что у самого ... ну.. это уже не ваше дело... Так проще..
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 08.12.2012, 22:44   #646 (permalink)
Активный участник
 
Аватар для Nata_FX
 
Регистрация: 12.10.2011
Сообщений: 50
Репутация: 36
Nata_FX
Сказал(а) спасибо: 10
Поблагодарили 35 раз(а) в 23 сообщениях
Поинты: 4
hoz, у тебя везде идет проверка g_ticket > 0, это не верно, тикет может быть равным 0.
Nata_FX на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (09.12.2012)
Старый 09.12.2012, 07:36   #647 (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
Сообщение от hoz Посмотреть сообщение
В общем-то я покопался и понял, где косяк. Вот добавил в начале ф-ции специально переменные 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.
Ну давай попробую я объяснить.
Для начала совет (бесплатный) Прежде чем заявлять о глюках компа, при написании программы, попробуй стать компом...
Ну давай к делу... Вот часть твоего кода. Допустим что ты где-то, в другой части программы, выбрал ордер для работы с ним.

double OSL = OrderStopLoss();// Здесь ты присваиваешь переменной OSL значение StopLoss того ордера который у тебя выбран.
double OTP = OrderTakeProfit();// То-же самое с OTP и TakeProfit
double sl = 0, tp = 0;
OSL = 0; OTP = 0;// А здесь переменным OSL и OTP присваиваешь значение нуль...

Только после этого принтуешь и получаешь то, что сам пожелал...
И по логике твоя логика не дружит с логикой.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (09.12.2012), Ugar (11.12.2012)
Старый 09.12.2012, 07:49   #648 (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
Сообщение от Nata_FX Посмотреть сообщение
hoz, у тебя везде идет проверка g_ticket > 0, это не верно, тикет может быть равным 0.
Ну конечно g_ticket как и любая переменная может быть равна нулю. Но почему ты утверждаешь что проверять g_ticket > 0 не верно???
В этом случае g_ticket может быть = 0 только если нет открытого ордера, но когда ордер откроется то g_ticket будет больше 0 и соответственно такая проверка очень уместна. Только надо позаботиться о том, чтобы обнулить её после закрытия ордера.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (09.12.2012), Ugar (11.12.2012)
Старый 09.12.2012, 09:24   #649 (permalink)
Активный участник
 
Аватар для Nata_FX
 
Регистрация: 12.10.2011
Сообщений: 50
Репутация: 36
Nata_FX
Сказал(а) спасибо: 10
Поблагодарили 35 раз(а) в 23 сообщениях
Поинты: 4
AlexeyVik, читай мануал.
Цитата:
int OrderSend( string symbol, int cmd, ...)
Основная функция, используемая для открытия позиции или установки отложенного ордера.
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи.
Поэтому уместна была бы проверка вида g_ticket > -1
Nata_FX на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (09.12.2012)
Старый 09.12.2012, 10:28   #650 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от Nata_FX Посмотреть сообщение
hoz, у тебя везде идет проверка g_ticket > 0, это не верно, тикет может быть равным 0.
Если g_ticket <= 0, значит нет открытой позиции, а значит дальше по коду мы не продвигается.
А если g_ticket > 0, значит ф-ции либо OpenSell(), либо OpenBuy() вернула значение тикета, тогда эксперт уже продолжает с ними работу. Тут всё логично.

Сообщение от AlexeyVik Посмотреть сообщение
Ну давай к делу... Вот часть твоего кода. Допустим что ты где-то, в другой части программы, выбрал ордер для работы с ним.

double OSL = OrderStopLoss();// Здесь ты присваиваешь переменной OSL значение StopLoss того ордера который у тебя выбран.
double OTP = OrderTakeProfit();// То-же самое с OTP и TakeProfit
double sl = 0, tp = 0;
OSL = 0; OTP = 0;// А здесь переменным OSL и OTP присваиваешь значение нуль...

Только после этого принтуешь и получаешь то, что сам пожелал...
И по логике твоя логика не дружит с логикой.

Это было давно и не правда, написано в спешке, я уже писал. Ты последний вариант видел? Или нужно пятится назад? Я тот вариант, что ты упомянул писал поздно ночью, написал чушь.. признаю.
Но последний вариант полностью рабочий. О каких ошибка ugar говорит вот это уже вопрос!
Видать их просто нет.. Ведь сова заработала уже без ошибок, после одной поправки.. Не трудно понять, что не из-за этой ф-ции.

Последний раз редактировалось hoz; 09.12.2012 в 10:34.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 09.12.2012, 10:31   #651 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от Nata_FX Посмотреть сообщение
AlexeyVik, читай мануал.

Поэтому уместна была бы проверка вида g_ticket > -1

Значение 0 не присваивается тикету насколько мне известно. А -1 в мануале, потому что это как обычно в булевых переменных, если выход из ф-ции с значением -1, то значит не отработана ф-ция. Я так понимаю. Тикета со значением 0 я не встречал..


Хотя опять же мануал кривоват. Если верить учебнику и не смотреть на другие аспекты в других его местах, то Ната права..
Ведь написано, -1 это не открылся ордер, значит.. открытый может быть и 0, и выше, а не только >0. Но почему-то никто так не пишит в коде.

Последний раз редактировалось hoz; 09.12.2012 в 10:34.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 09.12.2012, 10:41   #652 (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 Посмотреть сообщение
...Но почему-то никто так не пишит в коде.
0-ой тикет по любому присваивается ордерам открытым вручную. Ну или советником можно присвоить.

Вот мой шаблон советника. Пользуюсь тикет >-1.

Тьфу. Переплутал с меджиком.
Вложения:
Тип файла: mq4 Shabl (8).mq4 (16.2 Кб, 11 просмотров)

Последний раз редактировалось eevviill; 09.12.2012 в 10:44.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
alexshell (09.12.2012), Алекc1234 (09.12.2012)
Старый 09.12.2012, 11:45   #653 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Ну если только ручные, но для эксперта чаще всего они не нужны. Хотя.. кому как.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 09.12.2012, 11:51   #654 (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
Дама и господа. Я уже давно и достаточно внимательно читаю справку по языку, а не мануал, который у каждого свой.
У Наташи, например, если OrderSend() возвращает -1 то это обязательно должно быть присвоено переменной g_ticket
У Василия ... Я не дочитал, он оказывается сам понял что перепутал.

Так вот поясняю почему все эти функции, не только OrderSend(...), возвращают значение или -1.
По той простой причине, что объявляя переменную без присваивания ей значения она автоматом равна нулю. Так вот -1 в этом случае просто означает, что функция не выполнена, а 0 означает что ордера ещё не открывались (не-было попыток это сделать) и соответственно если больше нуля значит ордер открыт.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (09.12.2012), Ugar (11.12.2012)
Старый 09.12.2012, 11:59   #655 (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™
Сообщение от AlexeyVik Посмотреть сообщение
...
У Василия ... Я не дочитал, он оказывается сам понял что перепутал.

...Так вот -1 в этом случае просто означает, что функция не выполнена, а 0 означает что ордера ещё не открывались (не-было попыток это сделать) и соответственно если больше нуля значит ордер открыт.
Если так, то да. А если как в шаблоне (я уже точно про тикет говорю), то я делаю так. Сначало присвиваю переменной тикет -1.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 09.12.2012, 12:00   #656 (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
Сообщение от hoz Посмотреть сообщение
Это было давно и не правда, написано в спешке, я уже писал. Ты последний вариант видел? Или нужно пятится назад? Я тот вариант, что ты упомянул писал поздно ночью, написал чушь.. признаю.
Но последний вариант полностью рабочий. О каких ошибка ugar говорит вот это уже вопрос!
Видать их просто нет.. Ведь сова заработала уже без ошибок, после одной поправки.. Не трудно понять, что не из-за этой ф-ции.
Я не буду перечитывать весь ваш диалог, но знаю, что Ugar, (Андрей) очень грамотный программист. И если он что-то не понял значит об этом было не так сказано. Я почти уверен, что он говорил о том-же коде который процитировал я, а ты уже о другом, с поправками.

Последний раз редактировалось AlexeyVik; 09.12.2012 в 12:21.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (09.12.2012), Ugar (11.12.2012)
Старый 09.12.2012, 12:19   #657 (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
Сообщение от eevviill Посмотреть сообщение
Если так, то да. А если как в шаблоне (я уже точно про тикет говорю), то я делаю так. Сначало присвиваю переменной тикет -1.
Василий, это не совсем правильно, хотя и не критично. В этом случае нет различия, ордер не открыт из-за ошибки или просто не-было выполнено условие и соответственно попытки открыть ордер.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (09.12.2012), Ugar (11.12.2012)
Старый 09.12.2012, 12:36   #658 (permalink)
Активный участник
 
Аватар для Nata_FX
 
Регистрация: 12.10.2011
Сообщений: 50
Репутация: 36
Nata_FX
Сказал(а) спасибо: 10
Поблагодарили 35 раз(а) в 23 сообщениях
Поинты: 4
Сообщение от AlexeyVik Посмотреть сообщение
Дама и господа. Я уже давно и достаточно внимательно читаю справку по языку, а не мануал, который у каждого свой.
У Наташи, например, если OrderSend() возвращает -1 то это обязательно должно быть присвоено переменной g_ticket
У Василия ... Я не дочитал, он оказывается сам понял что перепутал.

Так вот поясняю почему все эти функции, не только OrderSend(...), возвращают значение или -1.
По той простой причине, что объявляя переменную без присваивания ей значения она автоматом равна нулю. Так вот -1 в этом случае просто означает, что функция не выполнена, а 0 означает что ордера ещё не открывались (не-было попыток это сделать) и соответственно если больше нуля значит ордер открыт.
Плохо ты справку читаешь.
функция OrderSend(...) возвращает или -1 или номер тикета. И точка. Если она вернет 0 значит это тикет ордера, а не по твоему
Цитата:
а 0 означает что ордера ещё не открывались (не-было попыток это сделать)
а строка в коде g_ticket = OrderSend(...); говорит о том, это обязательно должно быть присвоено переменной g_ticket.
Так что это не по моему, а по алгоритму.
Nata_FX на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
AlexeyVik (09.12.2012), eevviill (09.12.2012)
Старый 09.12.2012, 12:47   #659 (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™
Сообщение от Nata_FX Посмотреть сообщение
...
а строка в коде g_ticket = OrderSend(...); говорит о том, это обязательно должно быть присвоено переменной g_ticket.
Так что это не по моему, а по алгоритму.
Кажется он имел ввиду такую конструкцию.

PHP код:
int g_ticket;

if(
sig==buy)
g_ticket=OrderSend(...); 
В такос случае если нет сигнала, то тикет будет равен 0.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
AlexeyVik (09.12.2012)
Старый 09.12.2012, 13:06   #660 (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
Сообщение от Nata_FX Посмотреть сообщение
Если она вернет 0 значит это тикет ордера, а не по твоему
Это может произойти только если солнце повернётся.
Даже тестер начинает нумеровать ордера с единицы.

Спорить с женщинами не в моих правилах. Я умолкаю.

Последний раз редактировалось NSerega; 09.12.2012 в 13:37.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
3 пользователя(ей) сказали cпасибо:
eevviill (09.12.2012), Sergey Kovalyov (12.12.2012), Ugar (11.12.2012)
Ответ

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


Опции темы

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

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



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


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