Ответ
 
Опции темы
Старый 11.09.2013, 09:45   #1501 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,516
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2002
Сообщение от hoz Посмотреть сообщение
Я вот призадумался. Ведь многие функции, которые используются один раз за определённый момент времени(иногда довольно длинный), чтобы код эксперта работал быстрее, нужно в плане оптимизации вызывать как можно меньше. Но это и так понятно. Я хотел сказать, что, буквально вчера думал над некоторыми вариантами. Начал с функции модификации ордеров(первоначальной установки тейки и стопа). Для краткости назовём её ФМО, что бы ниже по контексту не писать больше, чем можно.
Я вижу 2 варианте реализации (если кто-нибудь может добавить.. буду очень рад!):

1. ФМО можно вызывать сразу из функции посыла ордера, неважно рыночного или отложенного, при условии, что ордер послан успешно и выбран его тикет:
PHP код:
if (ticket 0)
{  
                if (
SL != 0.0 || TP != 0.0)
                {
                    
double ld_SL 0.0ld_TP 0.0;
                    if (
OrderSelect (li_TicketSELECT_BY_TICKET))
                    {
                        
fOrderModify (ticketOrderOpenPrice(), SLTP00);
                    }
                }
            } 
Но при торговле на реале ордер может не модифицироваться, и, значится, нужно в старте снова вызывать функцию ФМО, чтобы установить стопы и теки ордерам, у которых ещё они не установлены.
2. Как-вариант, можно вообще в функции посылающей ордера не ставить ничего, а всё вызывать из старта.
В любом случает, приходится вызывать ФМО из старта постоянно, и, на каждом тике, а не, например, раз за бар или какое-то время. А удобно было как-то оптимизировать код, чтобы не вызывать ФМО из старта постоянно. Т.к. это экономия ресурсов, и выполнение лишних операции.

Есть какие-нибудь варианты решения данной ситуации?
Я думаю и у тебя есть функция проверки наличия ордеров этого советника. И вызывается она в любом случае с каждым тиком, ну мало-ли... может и закрылся какой-то ордер. Вот в эту проверку и поставь если(сл == 0 или тп == 0) ФМО;
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 11.09.2013, 10:08   #1502 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
Я думаю и у тебя есть функция проверки наличия ордеров этого советника.
Конечно есть! И очень качественная.

Сообщение от AlexeyVik Посмотреть сообщение
И вызывается она в любом случае с каждым тиком, ну мало-ли... может и закрылся какой-то ордер. Вот в эту проверку и поставь если(сл == 0 или тп == 0) ФМО;
Просто мне иногда кажется, что если на каждом тике выполнять кучу операций, может быть больше реквот.
Может это от того, что нет опыта торговли в реале именно совами(т.к. руками торгуя реквот точно не было..)
Получается лучше в старте запускать цикл перебора ордеров и в нём по очерёдно всё делать?

Кстати. Не будет ли самым верным решением создать глобальный флаг, который будет после посыла ордера становится например в какой-то режим, а пока он в таком режиме, это значит, что он поднят. А пока он поднят, модификацию запускать... Если он в другом режиме, а сменяться режим будет только в случае успешной модификации ордера, то значит больше пока новые ордера не появятся, не нужно модифицировать ничего.
Как Вам такая ситуация? Только вот тут есть момент, опять же.. нужно перебирать все ордера, и через счётчик проверять условия (типа сл != 0 или тп != 0 или равны нуля, в зависимости от условия..)

Последний раз редактировалось hoz; 11.09.2013 в 10:20.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.09.2013, 10:52   #1503 (permalink)
Местный житель
 
Аватар для jib07
 
Регистрация: 11.04.2011
Сообщений: 336
Репутация: 270
jib07 jib07 jib07
Сказал(а) спасибо: 180
Поблагодарили 269 раз(а) в 125 сообщениях
Поинты: 470
Сообщение от hoz Посмотреть сообщение
Конечно есть! И очень качественная.


Просто мне иногда кажется, что если на каждом тике выполнять кучу операций, может быть больше реквот.
Вообще непонятно на какой стадии Вы модите ордер, при его постановке или при каком то условии, почему на каждом тике выполняется модификация. Есть вариант долбить сервер пока он не поставит все что надо, конечно с интервалами и фильтрацией все возможных ошибок, при этом сова будет занята только этой проблемой, после постановки сова продолжит свою работу без всяких модифакаций на каждом тике)))
А проверка типа (sl+tp > 0) не многовариантна, а если у меня есть ордера которым СЛ и ТП не нужны, к чему геморой такой не понятно)))
jib07 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.09.2013, 11:16   #1504 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от hoz Посмотреть сообщение
Просто мне иногда кажется, что если на каждом тике выполнять кучу операций, может быть больше реквот.
Тут полезно понимать, что функции, выполняющиеся локально в терминале (OrderSelect(), OrderStopLoss() и т.п.), а также вся математика, исполняются ГОРАЗДО быстрее торговых функций, требующих обращения к серверу (OrderSend(), OrderModify() ... ). Так что проход по всем ордерам в цикле не займет и сотой доли времени, нужного для OrderModify() и этой долей обычно можно смело пренебречь.
Только в особо тяжелых случаях, если например надо всю историю из десятков тысяч ордеров перелопатить или большую матрицу, к примеру, обращать на каждом тике, тогда есть смысл думать об оптимизациях.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.09.2013, 12:24   #1505 (permalink)
Прохожий
 
Аватар для Хамзат
 
Регистрация: 11.09.2013
Сообщений: 1
Репутация: 1
Хамзат
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0

По умолчанию сигналы


что значит? investor mode [trades are not allowed]
Хамзат вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.09.2013, 13:43   #1506 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от Хамзат Посмотреть сообщение
что значит? investor mode [trades are not allowed]
У каждого счета есть два пароля. Один для трейдера, с полным доступом, другой read-only, для просмотра сделок и истории. Вы вошли с "инвесторским" паролем.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.09.2013, 14:00   #1507 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от jib07 Посмотреть сообщение
Вообще непонятно на какой стадии Вы модите ордер, при его постановке или при каком то условии, почему на каждом тике выполняется модификация. Есть вариант долбить сервер пока он не поставит все что надо, конечно с интервалами и фильтрацией все возможных ошибок, при этом сова будет занята только этой проблемой, после постановки сова продолжит свою работу без всяких модифакаций на каждом тике)))
А проверка типа (sl+tp > 0) не многовариантна, а если у меня есть ордера которым СЛ и ТП не нужны, к чему геморой такой не понятно)))
Я имел ввиду первоначальную модификацию. Если иная, то это уже другое дело же. Там уже по сигналу какому-то.. Каждый тик тут не причём.
Как-раз таки, чтоб не долбить сервер до потери пульса своей текущей задачей (модификацией) я и задал вопрос.

У меня вот сейчас не удаляет отложку. В старте так:

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

PHP код:
if (isCloseByTakeLastOpenPos(2))
      {
          Print(
"Вошли в функцию isCloseByTakeLastOpenPos");
          
ClosePosBySortLots();
          Print(
"Функция ClosePosBySortLots закрыла все рыночные ордера");
          
DeletePendingOrders();
          Print(
"Функция DeletePendingOrders завершена");
      } 
[свернуть]



Условие if (isCloseByTakeLastOpenPos(2)) выполняется... Когда она выполнилась, это значит, что нужно закрыть всё (отложенники и рыночные ордера). Срабатывает функция ClosePosBySortLots()
Она закрывает все рыночные ордера.
Дальше DeletePendingOrders() должна удалить все отложки. Но отложка не закрывается почему-то. Вот данная функция:

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

PHP код:
//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложенные ордеров                                           |
//+-------------------------------------------------------------------------------------+
void DeletePendingOrders()
{
    
int delCount 0,
        
err,
        
ticket;

   for (
int i=OrdersTotal()-1i>=0i--)
   {
      if (!
OrderSelect(iSELECT_BY_POS,MODE_TRADES)) continue;
      if (
OrderMagicNumber() != i_magic) continue;
      if (
OrderSymbol() != Symbol()) continue;
      if (
OrderType() > 1)
      {
         
ticket OrderTicket();
      
         while(
delCount 3)
         {
            while (!
IsTradeAllowed()) Sleep(5000);
      
            if (
OrderDelete(ticketRed))
                
delCount 3;
            else
                
err GetLastError();
      
            if (
err 0)
            { 
              Print(
delCount," #",ticket," Error modifing order: ("err ") ");
              
Sleep(5000); RefreshRates(); delCount++;
            }
         }
      }
   }

[свернуть]



В чём может быть загвоздка?

В журнале написало типа функция удаления отложек отработала:




Значит всё-таки функция косячит. Но канкретно я не нашёл сам ошибки.

Последний раз редактировалось NSerega; 12.09.2013 в 18:07.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 12.09.2013, 17:09   #1508 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Добавил обнуление счётчика попыток. По прежнему не работает:

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

PHP код:
void DeletePendingOrders()
{
    
int numberOfTry 0,
        
err,
        
ticket;

   for (
int i=OrdersTotal()-1i>=0i--)
   {
      if (!
OrderSelect(iSELECT_BY_POSMODE_TRADES)) continue;
      if (
OrderMagicNumber() != i_magic) continue;
      if (
OrderSymbol() != Symbol()) continue;
      if (
OrderType() > && OrderType() < 6)
      {
         
ticket OrderTicket();
         
numberOfTry 0;
      
         while (
numberOfTry 3)
         {
            while (!
IsTradeAllowed()) Sleep(5000);
                
err 0;
              Print(
"IsTradeAllowed() = "IsTradeAllowed());
              Print(
"err = "err);

            if (
OrderDelete(ticketRed))
            {
                
numberOfTry 3;
                Print(
"numberOfTry = "numberOfTry);
            }
            else
            {
                
err GetLastError();
                Print(
"err = "err);
            }
      
            if (
err 0)
            { 
              Print(
numberOfTry," #",ticket," Error modifing order: ("err ") ");
              
Sleep(5000); RefreshRates(); numberOfTry++;
            }
         }
      }
   }

[свернуть]

Последний раз редактировалось NSerega; 12.09.2013 в 18:07.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 12.09.2013, 17:45   #1509 (permalink)
Местный житель
 
Аватар для jib07
 
Регистрация: 11.04.2011
Сообщений: 336
Репутация: 270
jib07 jib07 jib07
Сказал(а) спасибо: 180
Поблагодарили 269 раз(а) в 125 сообщениях
Поинты: 470

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

Код:
if (DeletePendingOrders() == 0)
  Print("Функция DeletePendingOrders завершена");
else
  Print("Ошибка удаления отложек!");
void DeletePendingOrders() 
{ 
    int delCount = 0, 
        err, 
        ticket,
        kolord=0; 

   for (int i=OrdersTotal()-1; i>=0; i--) 
   { 
      if (!OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) continue; 
      if (OrderMagicNumber() != i_magic) continue; 
      if (OrderSymbol() != Symbol()) continue; 
      if (OrderType() > 1) 
      { 
         ticket = OrderTicket(); 
       
         while (delCount < 3) 
         { 
            while (!IsTradeAllowed()) Sleep(5000); 
       
            if (OrderDelete(ticket, Red)) 
                delCount = 3; 
            else 
                err = GetLastError(); 
       
            if (err > 0) 
            {  
              Print(delCount," #",ticket," Error modifing order: (", err , ") "); 
              Sleep(5000); RefreshRates(); delCount++; 
            } 
         } 
      } 
   } 
  for (int i=OrdersTotal()-1; i>=0; i--) 
   { 
      if (!OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) continue; 
      if (OrderMagicNumber() != i_magic) continue; 
      if (OrderSymbol() != Symbol()) continue; 
      if (OrderType() > 1) 
      { 
         kolord++;
      }
  return(kolord);
}
[свернуть]


вот с проверкой отсутствия отложек, но по скрину видно что 10я отложка поставилась после функции удаления, так что проблема не в закрытии, а в логики постановки)))
Немного не так, подправил))

Последний раз редактировалось NSerega; 12.09.2013 в 18:07.
jib07 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
hoz (13.09.2013)
Старый 13.09.2013, 21:46   #1510 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Есть функция для определения минимальной разрядности лота:

PHP код:
int LotDecimal()
{return (
MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));} 

Мне вот интересно, зачем тут логарифм, и, причём натуральный. Зачем деление одно на другое? Что вообще автор хотел этой функций реализовать?
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.09.2013, 08:53   #1511 (permalink)
Заблокирован
За второе место в конкурсе 

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

Хочу дать тебе совет. Я понимаю что ты не новичок в програмировании. Но надо писать чем по проще. Чесно говоря мне твой код читать так же сложно как дэкомпил.

Почему например не использовать что то типа

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

PHP код:
////////////////////////////////////////////////////////////////////////////////
void Close_all()
{
for(
int i=OrdersTotal()-1i>=0i--)
 {
 if(
OrderSelect(iSELECT_BY_POS))
 {
 if(
OrderMagicNumber()==magic)
 {
 if(
OrderSymbol()==Symbol())
 {
 
bool ticket_ex=false;
 for (
int j_ex 0;j_ex попытки закрытьj_ex++)
 {
 while(
IsTradeContextBusy()) Sleep(пауза перед повторной попыткой*1000);
 
RefreshRates();
 
 if(
OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYLIMITticket_ex=OrderDelete(OrderTicket(),CLR_NONE);
 if(
ticket_ex==true)break;
 }
 }
 }
 }
 }
 

[свернуть]
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.09.2013, 09:06   #1512 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
Сообщение от hoz Посмотреть сообщение
Есть функция для определения минимальной разрядности лота:

PHP код:
int LotDecimal()
{return (
MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));} 

Мне вот интересно, зачем тут логарифм, и, причём натуральный. Зачем деление одно на другое? Что вообще автор хотел этой функций реализовать?
А вы в школе математику учили?
Вычисляется логарифм по основанию 10 от bd_LOTSTEP, автор предполагает, что будет либо 2, либо 1, т.к. берется модуль и он, автор, думает, что лотстеп бывает 0.1 или 0.01
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (14.09.2013)
Старый 14.09.2013, 11:43   #1513 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от eevviill Посмотреть сообщение
...
Дальше DeletePendingOrders() должна удалить все отложки. Но отложка не закрывается почему-то. Вот данная функция:
...

Хочу дать тебе совет. Я понимаю что ты не новичок в програмировании. Но надо писать чем по проще. Чесно говоря мне твой код читать так же сложно как дэкомпил.

Почему например не использовать что то типа

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

PHP код:
////////////////////////////////////////////////////////////////////////////////
void Close_all()
{
for(
int i=OrdersTotal()-1i>=0i--)
 {
 if(
OrderSelect(iSELECT_BY_POS))
 {
 if(
OrderMagicNumber()==magic)
 {
 if(
OrderSymbol()==Symbol())
 {
 
bool ticket_ex=false;
 for (
int j_ex 0;j_ex попытки закрытьj_ex++)
 {
 while(
IsTradeContextBusy()) Sleep(пауза перед повторной попыткой*1000);
 
RefreshRates();
 
 if(
OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYLIMITticket_ex=OrderDelete(OrderTicket(),CLR_NONE);
 if(
ticket_ex==true)break;
 }
 }
 }
 }
 }
 

[свернуть]
Ты прав. Но тут есть один момент. Я начинал изучать язык с таких жёстких кодов, что для меня это уже типа нормально. Хотя, опять же, периодически не понимаю, что происходит у меня в коде, и, всё потому, что он не всегда очевиден.
Буду стараться упрощать..
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (14.09.2013)
Старый 14.09.2013, 11:54   #1514 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от ansol Посмотреть сообщение
А вы в школе математику учили?
Вычисляется логарифм по основанию 10 от bd_LOTSTEP, автор предполагает, что будет либо 2, либо 1, т.к. берется модуль и он, автор, думает, что лотстеп бывает 0.1 или 0.01
Да вроде как учил.. было дело
Давайте разложим всё по полочкам...
Есть функция:

PHP код:
int LotDecimal()
{
    return (
MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));

Тут:

PHP код:
 bd_LOTSTEP MarketInfo (Symbol(), MODE_LOTSTEP); 

Идём дальше..

PHP код:
MathLog (bd_LOTSTEP) / MathLog (10) = MathLog bd_LOTSTEP по основанию 10 
PHP код:
MathLog bd_LOTSTEP по основанию 10 = -4.605 
Теперь первоначальное выражение будет иметь вид:

PHP код:
int LotDecimal()
{
    return (
MathCeil (MathAbs (-4.605)));


Дальше:

PHP код:
int LotDecimal()
{
    return (
MathCeil (4.605));

А оно возвратит нам 5.

Что это даёт? Логики я не нахожу тут..
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.09.2013, 12:04   #1515 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
Десятичный логарифм от лотстеп будет -1 или -2 для лотсттеп равного 0.1 и 0.01 соответственно.
0.01 = 10**(-2) так понятнее?
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 14.09.2013, 12:06   #1516 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
_http://ru.wikipedia.org/wiki/Логарифм
Формула в разделе "Замена основания логарифма"

Последний раз редактировалось NSerega; 14.09.2013 в 13:49.
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 14.09.2013, 12:30   #1517 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от ansol Посмотреть сообщение
Десятичный логарифм от лотстеп будет -1 или -2 для лотсттеп равного 0.1 и 0.01 соответственно.
0.01 = 10**(-2) так понятнее?

Хм. Я подумал, в принципе да, так и получается. Но а есть в такой функции толк? По-моему, если есть вариант получить шаг из маркетинфо, то это вообще бред какой-то.

Это я так от любопытства капал библиотеки одного программиста. Вот думаю, то ли он совсем завёрнутый в никуда, либо есть в его коде рациональное зерно..

Последний раз редактировалось hoz; 14.09.2013 в 12:35.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.09.2013, 13:11   #1518 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
Сообщение от hoz Посмотреть сообщение
Хм. Я подумал, в принципе да, так и получается. Но а есть в такой функции толк? По-моему, если есть вариант получить шаг из маркетинфо, то это вообще бред какой-то.

Это я так от любопытства капал библиотеки одного программиста. Вот думаю, то ли он совсем завёрнутый в никуда, либо есть в его коде рациональное зерно..
Если вы рассчитываете лот по ММ, то потом его нужно нормализовать:
Lot = NormalizeDouble(Lot, циферка_какая-то)
если шаг лота 0.01, то циферка 2, а если 0.1 - единичка.
Если считать размер лота в процентах от эквити, к примеру, то получится много знаков после запятой и в функцию OrderSend такую шнягу напрямую втыкать нельзя.

Ну, это моё объяснение, ИМХО, так сказать
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
hoz (14.09.2013)
Старый 14.09.2013, 13:59   #1519 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от ansol Посмотреть сообщение
Если вы рассчитываете лот по ММ, то потом его нужно нормализовать:
Lot = NormalizeDouble(Lot, циферка_какая-то)
если шаг лота 0.01, то циферка 2, а если 0.1 - единичка.
Если считать размер лота в процентах от эквити, к примеру, то получится много знаков после запятой и в функцию OrderSend такую шнягу напрямую втыкать нельзя.

Ну, это моё объяснение, ИМХО, так сказать
Да. Именно для того.
Я пользуюсь таким способом.
PHP код:
int nor_lot;

//////////////////////////////////////////////////////////////
void init()
{  
if(
MarketInfo(Symbol(),MODE_LOTSTEP)==0.1nor_lot=1;
if(
MarketInfo(Symbol(),MODE_LOTSTEP)==0.01nor_lot=2;

eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
hoz (14.09.2013)
Старый 14.09.2013, 14:25   #1520 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
Сообщение от eevviill Посмотреть сообщение
Да. Именно для того.
Я пользуюсь таким способом.
PHP код:
int nor_lot;

//////////////////////////////////////////////////////////////
void init()
{  
if(
MarketInfo(Symbol(),MODE_LOTSTEP)==0.1nor_lot=1;
if(
MarketInfo(Symbol(),MODE_LOTSTEP)==0.01nor_lot=2;

Один if наверное лишний?
PHP код:
void init()
{  
nor_lot=2;
if(
MarketInfo(Symbol(),MODE_LOTSTEP)==0.1nor_lot=1;

ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (14.09.2013)
Ответ

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


Опции темы

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

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



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


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