Ответ
 
Опции темы
Старый 10.12.2012, 15:56   #661 (permalink)
Интересующийся
 
Аватар для aufx
 
Регистрация: 16.11.2012
Сообщений: 26
Репутация: 3
aufx
Сказал(а) спасибо: 11
Поблагодарили 2 раз(а) в 2 сообщениях
Поинты: 22

По умолчанию MessageBox


Коллеги, просветите плисс...
Окном, которое выводит MessageBox, можно управлять? (имеется ввиду размер и расположение в окне инструмента)
aufx вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.12.2012, 16:23   #662 (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™
Сообщение от aufx Посмотреть сообщение
Коллеги, просветите плисс...
Окном, которое выводит MessageBox, можно управлять? (имеется ввиду размер и расположение в окне инструмента)
Вроди бы нет.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.12.2012, 17:04   #663 (permalink)
Интересующийся
 
Аватар для aufx
 
Регистрация: 16.11.2012
Сообщений: 26
Репутация: 3
aufx
Сказал(а) спасибо: 11
Поблагодарили 2 раз(а) в 2 сообщениях
Поинты: 22
Сообщение от eevviill Посмотреть сообщение
Вроди бы нет.
Как жаль..
Но все равно Спасибо!
aufx вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.12.2012, 18:42   #664 (permalink)
Abi
Элитный участник
 
Аватар для Abi
 
Регистрация: 21.12.2010
Адрес: Kz Казахстан
Сообщений: 970
Репутация: 1695
Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi
Сказал(а) спасибо: 552
Поблагодарили 1,693 раз(а) в 559 сообщениях
Поинты: 551
Привет всем, подскажите почему в скрипте код закрытия ордеров(например селл, как в коде ниже) хорошо работает на счетах типа инстант и не работает на маркет ордерах(просто закрывает все ордера подряд, независимо от условий в функции закрывать только селл-ордера).
например в этом куске от известного прогера expforex...
Код:
void start() 
{
   int li_0 = OrdersTotal() - 1;
   if (AllSymbols == TRUE) 
   {
      if (gi_84) 
      {
         for (int l_pos_4 = li_0; l_pos_4 >= 0; l_pos_4--)
            if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES) && OrderType() == OP_SELL && GetMarketInfo() && (!OrderClose(OrderTicket(), OrderLots(), gda_76[0], g_slippage_80))) Print(OrderError());
      }
   }
   if (AllSymbols == FALSE) 
   {
      if (gi_84) {
         for (l_pos_4 = li_0; l_pos_4 >= 0; l_pos_4--) 
         {
            if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) 
            {
               if (OrderSymbol() == Symbol())
                  if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && GetMarketInfo() && (!OrderClose(OrderTicket(), OrderLots(), gda_76[0], g_slippage_80))) Print(OrderError());
            }
         }
      }
   }
}
Abi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.12.2012, 19:31   #665 (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™
Сообщение от Abi Посмотреть сообщение
...
Здесь проверка на тип ордера есть. Так что єто скорее всего не єтот блок бай закрывает.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Abi (10.12.2012)
Старый 10.12.2012, 20:19   #666 (permalink)
Abi
Элитный участник
 
Аватар для Abi
 
Регистрация: 21.12.2010
Адрес: Kz Казахстан
Сообщений: 970
Репутация: 1695
Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi
Сказал(а) спасибо: 552
Поблагодарили 1,693 раз(а) в 559 сообщениях
Поинты: 551
Сообщение от eevviill Посмотреть сообщение
Здесь проверка на тип ордера есть. Так что єто скорее всего не єтот блок бай закрывает.
Да вроде все пересмотрел - это основная функция закрывающая ордера по условию.

помогите если что = вот весь код...

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

Код:
#property copyright "expforex"
#property link      "Expforex Прибыльные советники - - Главная страница -"
#property show_inputs
#include <stdlib.mqh>
double gda_76[2];
int g_slippage_80;
bool gi_84 = TRUE;
extern bool AllSymbols = FALSE;
void init() 
{
   //Stamp();
   start();
}
void start() 
{
   int li_0 = OrdersTotal() - 1;
   if (AllSymbols == TRUE) 
   {
      if (gi_84) 
      {
         for (int l_pos_4 = li_0; l_pos_4 >= 0; l_pos_4--)
            if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES) && OrderType() == OP_SELL && GetMarketInfo() && (!OrderClose(OrderTicket(), OrderLots(), gda_76[0], g_slippage_80))) Print(OrderError());
      }
   }
   if (AllSymbols == FALSE) 
   {
      if (gi_84) 
      {
         for (l_pos_4 = li_0; l_pos_4 >= 0; l_pos_4--) 
         {
            if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) 
            {
               if (OrderSymbol() == Symbol())
                  if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && GetMarketInfo() && (!OrderClose(OrderTicket(), OrderLots(), gda_76[0], g_slippage_80))) Print(OrderError());
            }
         }
      }
   }
}
string OrderError() 
{
   int l_error_0 = GetLastError();
   return (StringConcatenate("Order:", OrderTicket(), " GetLastError()=", l_error_0, " ", ErrorDescription(l_error_0)));
}
int GetMarketInfo() 
{
   RefreshRates();
   gda_76[0] = MarketInfo(OrderSymbol(), MODE_ASK);
   gda_76[1] = MarketInfo(OrderSymbol(), MODE_BID);
   double l_point_0 = MarketInfo(OrderSymbol(), MODE_POINT);
   if (l_point_0 == 0.0) return (0);
   g_slippage_80 = (gda_76[0] - gda_76[1]) / l_point_0;
   return (gda_76[0] > 0.0 && gda_76[1] > 0.0);
}
void Stamp() 
{
   ObjectCreate("Original", OBJ_LABEL, 0, 0, 0);
   ObjectSetText("Original", " ---http://Expforex.at.ua---", 10, "Arial Bold", Red);
   ObjectSet("Original", OBJPROP_CORNER, 2);
   ObjectSet("Original", OBJPROP_XDISTANCE, 200);
   ObjectSet("Original", OBJPROP_YDISTANCE, 10);
}
[свернуть]


проверял на ECN-счетах от Альпари и KGFX - результат одинаковый, закрывает все подряд....

Последний раз редактировалось NSerega; 10.12.2012 в 23:23.
Abi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.12.2012, 20:37   #667 (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™
Сообщение от Abi Посмотреть сообщение
Да вроде все пересмотрел - это основная функция закрывающая ордера по условию.

помогите если что = вот весь код...
...
проверял на ECN-счетах от Альпари и KGFX - результат одинаковый, закрывает все подряд....
Если чесно мне не очень нравится как написано. Могу помочь функцией закрытия ордера.

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

PHP код:
////////////////////////////////////////////////////////////////////////////////
void Close_f()
{
for(
int i=OrdersTotal()-1i>=0i--)
 {
 
OrderSelect(i,SELECT_BY_POS);
 {
 if(
OrderMagicNumber()==magic)
 {
 if(
OrderSymbol()==Symbol())
 {
 
bool ticket_ex=false;
 for (
int j_ex 0;j_ex MaxAttemptsj_ex++)
 {
 while(
IsTradeContextBusy()) Sleep(1000);
 
 
//if(OrderType()==OP_BUY ) ticket_ex=OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); 
 
if(OrderType()==OP_SELLticket_ex=OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow);
 
//if(OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYLIMIT) ticket_ex=OrderDelete(OrderTicket(),CLR_NONE);
 
if(ticket_ex==true)break;
 }
 }
 }
 }
 }
 

[свернуть]

Последний раз редактировалось NSerega; 10.12.2012 в 23:24.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Abi (10.12.2012), alexshell (10.12.2012)
Старый 10.12.2012, 21:13   #668 (permalink)
Активный участник
 
Аватар для sochinik
 
Регистрация: 10.05.2012
Адрес: Курск-Краснодар
Сообщений: 326
Репутация: 170
sochinik - sochinik -
Сказал(а) спасибо: 142
Поблагодарили 169 раз(а) в 65 сообщениях
Поинты: 254
Отправить сообщение для sochinik с помощью ICQ Отправить сообщение для sochinik с помощью MSN Отправить сообщение для sochinik с помощью Skype™
Сообщение от aufx Посмотреть сообщение
Коллеги, просветите плисс...
Окном, которое выводит MessageBox, можно управлять? (имеется ввиду размер и расположение в окне инструмента)
Как я слышал с MessageBox нужно работать осторожно, оно осмтанавливает работу советника пока не закроете его.....Но это по учебной информации... на себе не проверял
sochinik вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (10.12.2012)
Старый 10.12.2012, 21:31   #669 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
По той простой причине, что объявляя переменную без присваивания ей значения она автоматом равна нулю. Так вот -1 в этом случае просто означает, что функция не выполнена, а 0 означает что ордера ещё не открывались (не-было попыток это сделать) и соответственно если больше нуля значит ордер открыт.

Подчёркнутое - это не разные вещи! Это следствие... Рассмотрим канкретнее данный момент:
1. Если функция, в данном случает OrderSend() не выполнена, значит ордер есс-но не открылся.
2. Если функция выполнена, ордер может открыться, а может и не открыться.

И самое интересное, тут:

Сообщение от AlexeyVik Посмотреть сообщение
а 0 означает что ордера ещё не открывались (не было попыток это сделать) и соответственно если больше нуля значит ордер открыт.

3. если ордера не открывались это означает, что функция вернёт -1 т.е. она не вернула нам ордер тикета, а значит вернёт -1(согласно справке)

Сообщение от AlexeyVik Посмотреть сообщение
Я не буду перечитывать весь ваш диалог, но знаю, что Ugar, (Андрей) очень грамотный программист. И если он что-то не понял значит об этом было не так сказано. Я почти уверен, что он говорил о том-же коде который процитировал я, а ты уже о другом, с поправками.
Таким образом, Nata_FX права...
0 - это тикет ордеров открытых в ручную, на сколько мне известно.

На сколько грамотный программист Ugar я понятия не имею, но мне важно не это, а отношение к других программиста.
Ведь я просил совета, и всего то...
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.12.2012, 21:35   #670 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 918
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
Сообщение от Abi Посмотреть сообщение
Да вроде все пересмотрел - это основная функция закрывающая ордера по условию.

помогите если что = вот весь код...


проверял на ECN-счетах от Альпари и KGFX - результат одинаковый, закрывает все подряд....
Он и будет всё закрывать.
if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && GetMarketInfo() && (!OrderClose(OrderTicket(), OrderLots(), gda_76[0], g_slippage_80))) Print(OrderError());
Грубо говоря Ордер селл-нет&& закрыть Он и закроет.
Замените на это

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

PHP код:
#property copyright "expforex"
#property link      "Expforex Прибыльные советники - - Главная страница -"
#property show_inputs
#include <stdlib.mqh>
double gda_76[2];
int g_slippage_80;
bool gi_84 TRUE;
extern bool AllSymbols FALSE;
void init() 
{
   
//Stamp();
   
start();
}
void start() 
{
   
int li_0 OrdersTotal() - 1;
   if (
AllSymbols == TRUE
   {
      if (
gi_84
      {
         for (
int l_pos_4 li_0l_pos_4 >= 0l_pos_4--)
            if (
OrderSelect(l_pos_4SELECT_BY_POSMODE_TRADES) && OrderType() == OP_SELL && GetMarketInfo() )
            {
          
int tOrderClose(OrderTicket(), OrderLots(), gda_76[0], g_slippage_80);if (t<0) Print(OrderError());}
      }
   }
   if (
AllSymbols == FALSE
   {
      if (
gi_84
      {
         for (
l_pos_4 li_0l_pos_4 >= 0l_pos_4--) 
         {
            if (
OrderSelect(l_pos_4SELECT_BY_POSMODE_TRADES)) 
            {
               if (
OrderSymbol() == Symbol()) {
                 if (
OrderSelect(l_pos_4SELECT_BY_POSMODE_TRADES) && OrderType() == OP_SELL && GetMarketInfo() )
            {
         
tOrderClose(OrderTicket(), OrderLots(), gda_76[0], g_slippage_80);if (t<0) Print(OrderError());}
            } }
         }
      }
   }
}
string OrderError() 
{
   
int l_error_0 GetLastError();
   return (
StringConcatenate("Order:"OrderTicket(), " GetLastError()="l_error_0" "ErrorDescription(l_error_0)));
}
int GetMarketInfo() 
{
   
RefreshRates();
   
gda_76[0] = MarketInfo(OrderSymbol(), MODE_ASK);
   
gda_76[1] = MarketInfo(OrderSymbol(), MODE_BID);
   
double l_point_0 MarketInfo(OrderSymbol(), MODE_POINT);
   if (
l_point_0 == 0.0) return (0);
   
g_slippage_80 = (gda_76[0] - gda_76[1]) / l_point_0;
   return (
gda_76[0] > 0.0 && gda_76[1] > 0.0);
}
void Stamp() 
{
   
ObjectCreate("Original"OBJ_LABEL000);
   
ObjectSetText("Original"" ---http://Expforex.at.ua---"10"Arial Bold"Red);
   
ObjectSet("Original"OBJPROP_CORNER2);
   
ObjectSet("Original"OBJPROP_XDISTANCE200);
   
ObjectSet("Original"OBJPROP_YDISTANCE10);

[свернуть]

Последний раз редактировалось NSerega; 10.12.2012 в 23:25.
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Abi (10.12.2012), eevviill (11.12.2012)
Старый 10.12.2012, 21:41   #671 (permalink)
Abi
Элитный участник
 
Аватар для Abi
 
Регистрация: 21.12.2010
Адрес: Kz Казахстан
Сообщений: 970
Репутация: 1695
Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi
Сказал(а) спасибо: 552
Поблагодарили 1,693 раз(а) в 559 сообщениях
Поинты: 551
Спасибо eevviill , попробую вставить в скрипт...
И тебе alexshell спасибо...
хотя не совсем понял - вроде там нет ошибки, на инстанте ведь работает как часы...
и вроде там не "Ордер селл-нет&& "
а так: если все наши условия соблюдены, типа символ=наш, ордер=селл и GetMarketInfo вернул значение слипажа, а ордер при этом не закрылся = то выдать ошибку...

Последний раз редактировалось Abi; 10.12.2012 в 22:06.
Abi вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
alexshell (10.12.2012)
Старый 10.12.2012, 21:56   #672 (permalink)
Abi
Элитный участник
 
Аватар для Abi
 
Регистрация: 21.12.2010
Адрес: Kz Казахстан
Сообщений: 970
Репутация: 1695
Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi
Сказал(а) спасибо: 552
Поблагодарили 1,693 раз(а) в 559 сообщениях
Поинты: 551
Сообщение от hoz Посмотреть сообщение
0 - это тикет ордеров открытых в ручную, на сколько мне известно.

...
Насколько помню я, 0 - это магик ордера открытого вручную, тикет не может быть равен нулю вроде.
Иначе(если следовать вашей логике) мы вручную наплодим к примеру 10 ордеров с 0 тикетом, как их потом отделять друг от друга?
Abi вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (11.12.2012)
Старый 10.12.2012, 22:01   #673 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 918
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
Сообщение от Abi Посмотреть сообщение
Спасибо eevviill , попробую вставить в скрипт...
И тебе alexshell спасибо...
хотя не совсем понял - вроде там нет ошибки, на инстанте ведь работает как часы...
вроде там не "Ордер селл-нет&& " а если ордер не закрыт то выдать ошибку...
Не знаю как он на инстанте может работать. Ф-я закрытия находится в условиях. Т.е всё что мы выбрали до этого это символ.
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Abi (10.12.2012)
Старый 10.12.2012, 22:20   #674 (permalink)
Abi
Элитный участник
 
Аватар для Abi
 
Регистрация: 21.12.2010
Адрес: Kz Казахстан
Сообщений: 970
Репутация: 1695
Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi
Сказал(а) спасибо: 552
Поблагодарили 1,693 раз(а) в 559 сообщениях
Поинты: 551
Сообщение от alexshell Посмотреть сообщение
Не знаю как он на инстанте может работать. Ф-я закрытия находится в условиях. Т.е всё что мы выбрали до этого это символ.
Не знаю как - но работает и закрывает только селы, не трогая баи.
Но это не важно уже - ваша переделка работает на маркете и это достаточно.
Abi вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
alexshell (10.12.2012)
Старый 10.12.2012, 22:23   #675 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 918
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
Abi, скопируй ещё раз скрипт. Я его отредактировал. В спешке пару скобок забыл. А то он у меня тоже бы начал ордера все закрывать которые не по совпадают с символом.
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Abi (11.12.2012)
Старый 11.12.2012, 06:29   #676 (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 Посмотреть сообщение
Подчёркнутое - это не разные вещи! Это следствие... Рассмотрим канкретнее данный момент:
1. Если функция, в данном случает OrderSend() не выполнена, значит ордер есс-но не открылся.
2. Если функция выполнена, ордер может открыться, а может и не открыться.

И самое интересное, тут:




3. если ордера не открывались это означает, что функция вернёт -1 т.е. она не вернула нам ордер тикета, а значит вернёт -1(согласно справке)
У меня, извини, нет желания повторно разжёвывать всё это. Только уточню лично для тебя. Если ордера не открывались означает, что не-было сигнала и соответственно ф-ция OrderSend() не вызывалась.

Сообщение от hoz Посмотреть сообщение
Таким образом, Nata_FX права...
0 - это тикет ордеров открытых в ручную, на сколько мне известно.
В том сообщении которое ты цитируешь было сказано о том, что Василий eevviill написал то-же самое, но сразу понял что перепутал и исправил свой пост.
Если ты это не понял, повторяю. Тикет это не магик...
Сообщение от hoz Посмотреть сообщение
На сколько грамотный программист Ugar я понятия не имею, но мне важно не это, а отношение к других программиста.
Ведь я просил совета, и всего то...
И здесь приходится повторять уже сказанное. Я не буду перечитывать ваш диалог. И не буду судить кто прав кто нет.

Не в обиду тебе. Я видел твой вопрос ещё до ответа Андрея, но отвечать на него не стал. Какой вопрос такой и ответ. Ты путаешь тикет с магиком и что-то оспариваешь вместо того чтобы вникнуть и понять. И мне кажется, что в диалоге с Андреем ты тоже пытался что-то доказывать.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
3 пользователя(ей) сказали cпасибо:
alexshell (11.12.2012), eevviill (11.12.2012), Ugar (11.12.2012)
Старый 12.12.2012, 17:43   #677 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
Не в обиду тебе. Я видел твой вопрос ещё до ответа Андрея, но отвечать на него не стал. Какой вопрос такой и ответ. Ты путаешь тикет с магиком и что-то оспариваешь вместо того чтобы вникнуть и понять. И мне кажется, что в диалоге с Андреем ты тоже пытался что-то доказывать.

Никакой обиды нет, я же не профи, чтоб всегда выражаться верно. Видать, где-то ошибся. Но зачем же так категорично то всё воспринимать?
По сути, я на самом деле, с меджиком перепутал. Как обычно, на форум вылез уже после того как немало заработался, и написать не то что хотел. Понимаю, что не то, но в тот момент, голова уже не особо понимала, что писал..
Признаю свою описку(ошибку) в предыдущем посте. Хотя вот один нюанс я так всё-таки не особо понял, но он не столь важный, чтобы мусолить его видимо.

Не допонял я это:

Сообщение от AlexeyVik Посмотреть сообщение
Так вот поясняю почему все эти функции, не только OrderSend(...), возвращают значение или -1.
По той простой причине, что объявляя переменную без присваивания ей значения она автоматом равна нулю. Так вот -1 в этом случае просто означает, что функция не выполнена, а 0 означает что ордера ещё не открывались (не-было попыток это сделать) и соответственно если больше нуля значит ордер открыт.

Никто ни когда не сравнивает тикет с 0, а сразу пишут -1. Вот тут я честно сказать, не допонял.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
sochinik (13.12.2012)
Старый 13.12.2012, 07:04   #678 (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 Посмотреть сообщение
но он не столь важный, чтобы мусолить его видимо.

Не допонял я это:

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

По существу:
Если я так сравниваю, то "Никто ни когда" уже не выполнено
Всё зависит из какого места кода идёт сравнение и цель сравнивания. Я часто пользуюсь переменной Ticket объявленной на глобальном уровне. Это избавляет от лишних циклов перебора ордеров для определения каких-либо свойств ордера. Поэтому обязательно должно быть условие Ticket > 0 а когда ордер закрывается переменную Ticket обнуляю.
Но в момент открытия ордера нужна именно такая проверка о которой ты говоришь, но для такого сравнения у меня другая переменная в отдельной пользовательской функции открытия ордеров. Вот тогда и сравниваю if(ticket == -1) Если условие выполнено значит ошибка. И надо предпринять что-то для повторной попытки открыть ордер или выйти из функции. А для пущей уверенности, что корявость МТ4 не перепутает переменные я пишу их разными Ticket и ticket
Очень надеюсь, что теперь ты всё понял.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
3 пользователя(ей) сказали cпасибо:
eevviill (13.12.2012), hoz (13.12.2012), sochinik (13.12.2012)
Старый 13.12.2012, 14:28   #679 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
По существу:
Если я так сравниваю, то "Никто ни когда" уже не выполнено
Всё зависит из какого места кода идёт сравнение и цель сравнивания. Я часто пользуюсь переменной Ticket объявленной на глобальном уровне. Это избавляет от лишних циклов перебора ордеров для определения каких-либо свойств ордера. Поэтому обязательно должно быть условие Ticket > 0 а когда ордер закрывается переменную Ticket обнуляю.
Но в момент открытия ордера нужна именно такая проверка о которой ты говоришь, но для такого сравнения у меня другая переменная в отдельной пользовательской функции открытия ордеров. Вот тогда и сравниваю if(ticket == -1) Если условие выполнено значит ошибка. И надо предпринять что-то для повторной попытки открыть ордер или выйти из функции. А для пущей уверенности, что корявость МТ4 не перепутает переменные я пишу их разными Ticket и ticket
Очень надеюсь, что теперь ты всё понял.

Понял с большего, хотя, конечно, визуально понимается лучше.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 13.12.2012, 14:32   #680 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Я переписал эксперт, и теперь у него не всегда при модификации ставятся стопы(для есн. типа счетов).

Вот что у меня в торговой ф-ции и ф-циях открытия и модификации):

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

PHP код:
//+-------------------------------------------------------------------------------------+
//| Модификация ордеров для ECN - счетов                                                |
//+-------------------------------------------------------------------------------------+
bool OrdersModifying()
{
  
int total OrdersTotal() - 1;
  
double sl 0tp 0;
  
  for(
int i=totali>=0i--)
  {
    if(
OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)                            // Если ордер есть и он выбран..
    
{
      if(
g_type == OP_BUY)
      {
        if(
i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           
sl NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits);                    // Получаем значение стоп-лосса для выбранного ордера
        
if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           
tp NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits);                    // Получаем значение тейкпрофита для выбранного ордера
      
}
      if(
g_type == OP_SELL)
      {
        if(
i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           
sl NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits);                // Получаем значение стоп-лосса для выбранного ордера
        
if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           
tp NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits);                // Получаем значение тейкпрофита для выбранного ордера
      
}
      if(
OrderStopLoss() != sl || OrderTakeProfit() != tp)                                                            // Если полученные значения sl и tp не равныы 0, то..
      
{
        
OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
      
}
    }
  }
  return(
true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
  
g_ticket = -1;
  
string myNote "сов баянул";
  
  if(
GetPriceToInput() < Ask)
  {       
    
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)
    {
      if(!
OrdersModifying())
        return(
false);
    }

  return(
true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell()
{
  
g_ticket = -1;
  
string myNote "сов шортанул";

  if(
GetPriceToInput() > Bid)
  {
    
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)
    {
      if(!
OrdersModifying())
        return(
false);
    }
  
  return(
true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade (int signal)
{
  
FindOrders();

  if(
signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    
if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      
return(false);                                                                
      
  if(
signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     
if(!OpenSell())
       return(
false);                                                              // открываем лимитный ордер на продажу

 //   if(OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES))
  //  {
   //     if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
    //    OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
  //  }    
 // if(UseBU == true)
   //  MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  
return(true);

[свернуть]



Может кто подсказать где ошибка? По логике всё верно как я вижу.

Последний раз редактировалось NSerega; 13.12.2012 в 15:15.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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