N분 안에 포지션을 하나씩 청산하는 방법은 무엇입니까? - 페이지 2

 
Maxim Kuznetsov :

가장 간단한 방법은 주문을 마감해야 하는 시간을 댓글 필드에 작성하는 것입니다.

댓글에 희망이 없습니다. 이 필드를 변경(자체 데이터 추가)할 뿐만 아니라 이전에 입력한 정보를 단순히 지우는 DC가 있습니다.

 
Ihor Herasko :

그럼 뭐가 문제야?

  1. 전문가가 개설한 가장 오래된 주문을 찾습니다. 가장 작은 OrderOpenTime()이 있습니다.
  2. 이 주문이 열린 순간부터현재 시간 까지 경과한 시간을 비교합니다. 지정된 값보다 크거나 같으면 닫습니다.

당신의 선택은 저에게 큰 도움이 되었습니다. 고맙습니다.

레나트 아크티아모프 :

존재 시점까지, 당신은 모든 최초 공개 주문과 마지막 주문 모두에서 선택할 수 있습니다. 동시에 우리는 티켓과 존재 시간(초)을 기억합니다. 예를 들어

귀하의 버전도 작동합니다. 고맙습니다.


나는 첫 번째 옵션을 작동하도록 남겨 둘 것입니다))

 int TicketCL=- 1 ;
datetime TimeOp= D'3000.12.30' ;
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) && OrderType ()< 2 && OrderMagicNumber ()==Magic && OrderSymbol ()== Symbol ()){
   if (TicketCL< 0 || OrderOpenTime ()<TimeOp){
      TicketCL= OrderTicket ();
      TimeOp= OrderOpenTime ();}
}
if ( TimeCurrent ()-TimeOp>=MinuteOrdCL* 60 ) CloseOrd(TicketCL);

} //Start END//

void CloseOrd( int ticket){
   int close;
   double price= 0.0 ;
   color cl;
   for (i= 0 ;i< OrdersTotal ();i++)
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) && OrderType ()< 2 && OrderMagicNumber ()==Magic && OrderSymbol ()== Symbol ()){
   if ( OrderType ()== OP_BUY )  {price= NormalizeDouble ( Bid , Digits );cl=DeepSkyBlue;}
   if ( OrderType ()== OP_SELL ) {price= NormalizeDouble ( Ask , Digits );cl=Magenta;}
   if ( OrderType ()< 2 ) {close= OrderClose (ticket, OrderLots (),price, 30 ,cl);}}}

도움을 주셔서 감사합니다. 이익))

 
Ihor Herasko :

댓글에 희망이 없습니다. 이 필드를 변경(자체 데이터 추가)할 뿐만 아니라 이전에 입력한 정보를 단순히 지우는 DC가 있습니다.

근거가 없음 - 이 DC의 목록을 제공하십시오

 
Maxim Kuznetsov :

근거가 없음 - 이 DC의 목록을 제공하십시오

  1. 외환 서비스
  2. BrockBusinessBank

 
Natalya Dzerzhinskaya :

당신의 선택은 저에게 큰 도움이 되었습니다. 고맙습니다.

귀하의 버전도 작동합니다. 고맙습니다.


나는 첫 번째 옵션을 작동하도록 남겨 둘 것입니다))

도움을 주셔서 감사합니다. 이익))

단 하나의 질문: 티켓이 알려진 경우

 void CloseOrd( int ticket ){

티켓으로 주문을 선택할 수 있다면 왜 나중에 사이클을 찾으세요?

 if ( OrderSelect (i, SELECT_BY_TICKET ) && OrderType ()< 2 && OrderMagicNumber ()==Magic && OrderSymbol ()== Symbol ()){

그리고 주문 유형을 확인하는 대신 이 경우 OrderCloseTime()의 마감 시간을 확인하는 것이 좋습니다. 만일에 갑자기 stop/take에 의해 이미 마감된 경우를 대비하여.

 
Alexey Viktorov :

단 하나의 질문: 티켓이 알려진 경우

티켓으로 주문을 선택할 수 있다면 왜 나중에 사이클을 찾으세요?

그리고 주문 유형을 확인하는 대신 이 경우 OrderCloseTime()의 마감 시간을 확인하는 것이 좋습니다. 만일에 갑자기 stop/take에 의해 이미 마감된 경우를 대비하여.

나는 나탈리아가 그런 식으로 그것을 원한다고 생각했습니다. 티켓을 찾는 데 당황했지만 분명히 모든 카드가 공개되지는 않았습니다.

)

 
Natalya Dzerzhinskaya :

당신의 선택은 저에게 큰 도움이 되었습니다. 고맙습니다.

귀하의 버전도 작동합니다. 고맙습니다.


나는 첫 번째 옵션을 작동하도록 남겨 둘 것입니다))

도움을 주셔서 감사합니다. 이익))


위의 공정한 의견. 티켓이 이미 알려진 경우 모든 주문을 다시 검토해야 하는 이유는 무엇입니까? 또한 함수에서:

 void CloseOrd( int ticket){
   int close;
   double price= 0.0 ;
   color cl;
   for (i= 0 ;i< OrdersTotal ();i++)
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) && OrderType ()< 2 && OrderMagicNumber ()==Magic && OrderSymbol ()== Symbol ()){
   if ( OrderType ()== OP_BUY )  {price= NormalizeDouble ( Bid , Digits );cl=DeepSkyBlue;}
   if ( OrderType ()== OP_SELL ) {price= NormalizeDouble ( Ask , Digits );cl=Magenta;}
   if ( OrderType ()< 2 ) {close= OrderClose (ticket, OrderLots (),price, 30 ,cl);}}}

닫으려는 주문과 전혀 다른 볼륨을 얻을 위험이 있습니다. 결국 OrderLots() 는 선택한 주문 을 참조하는 반면 티켓은 완전히 다른 주문을 참조합니다. 다음과 같이 하는 것이 좋습니다.

 void CloseOrd( int ticket)
{
   if (! OrderSelect (ticket, SELECT_BY_TICKET ) || OrderCloseTime () == 0 )
       return ;
   
   bool bRes = OrderClose (ticket, OrderLots (), OrderClosePrice (), 30 , cl);
}
 
Ihor Herasko :

위의 공정한 의견. 티켓이 이미 알려진 경우 모든 주문을 다시 검토해야 하는 이유는 무엇입니까? 또한 함수에서:

닫으려는 주문과 전혀 다른 볼륨을 얻을 위험이 있습니다. 결국 OrderLots() 는 선택한 주문 을 참조하는 반면 티켓은 완전히 다른 주문을 참조합니다. 다음과 같이 하는 것이 좋습니다.


그래서 전혀 닫히지 않습니다.

 
Natalya Dzerzhinskaya :

그래서 전혀 닫히지 않습니다.


양해를 구합니다. 라인:

 if (! OrderSelect (ticket, SELECT_BY_TICKET ) || OrderCloseTime () == 0 )

다음과 같이 다시 작성해야 합니다.

 if (! OrderSelect (ticket, SELECT_BY_TICKET ) || OrderCloseTime () > 0 )
 
//закрытие по тикету, переделайте под свой

                  if(OrderSelect(MyTicketBuy, SELECT_BY_TICKET)==true)
                  {
                     close=OrderClose(MyTicketBuy,OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),0,clrRed);
                     if(close<0){if(Fun_Error(GetLastError())==1)return;}
                  }
                  if(OrderSelect(MyTicketSell, SELECT_BY_TICKET)==true)
                  {
                     close=OrderClose(MyTicketSell,OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),0,clrBlue);
                     if(close<0){if(Fun_Error(GetLastError())==1)return;}
                  }
//+-------------- ФУНКЦИЯ ОБРАБОТКИ ОШИБОК ---------------------------------+
 int Fun_Error(int Error)
  {   switch(Error)
     {
           case 0:      return (0);
           case 1:      Print("Попытка изменить уже установленные значения такими же значениями.");return(1);
           case 2:      Print("Общая ошибка. Прекратить все попытки торговых операций до выяснения обстоятельств.");return(0);
           case 3:      Print("В торговую функцию переданы неправильные параметры.");return(1);
           case 4:      Print("Торговый сервер занят.Пробуем ещё раз..");Sleep(3000);return(1);
           case 5:      Print("Старая версия клиентского терминала.");return(0);
           case 6:      Print("Нет связи с торговым сервером.");return(1);
           case 7:      Print("Недостаточно прав.");return(1);
           case 8:      Print("Слишком частые запросы.");return(1);
           case 9:      Print("Недопустимая операция нарушающая функционирование сервера.");return(1);
           case 64:     Print("Счет заблокирован. Необходимо прекратить все попытки торговых операций.");return(0);
           case 65:     Print("Неправильный номер счета.");return(1);
           case 128:    Print("Истек срок ожидания совершения сделки.");return(1);
           case 129:    Print("Неправильная цена bid или ask, возможно, ненормализованная цена.");return(1);
           case 130:    Print("Слишком близкие стопы или неправильно рассчитанные или ненормализованные цены в стопах (или в цене открытия отложенного ордера).");return(1);
           case 131:    Print("Неправильный объем, ошибка в грануляции объема.");return(1);
           case 132:    Print("Рынок закрыт.");return(1);
           case 133:    Print("Торговля запрещена.");return(0);
           case 134:    Print("Недостаточно денег для совершения операции.");return(0);
           case 135:    Print("Цена изменилась. Пробуем ещё раз..");RefreshRates();return(1);
           case 136:    Print("Нет цен. Ждём новый тик..");
                        while(RefreshRates()==false)// До нового тика
                        Sleep(1);
                        return(1);
           case 137:    Print("Брокер занят.Пробуем ещё раз..");Sleep(3000);return(1);
           case 138:    Print("Запрошенная цена устарела, либо перепутаны bid и ask.");return(1);
           case 139:    Print("Ордер заблокирован и уже обрабатывается.");return(1);
           case 140:    Print("Разрешена только покупка. Повторять операцию SELL нельзя.");return(1);
           case 141:    Print("Слишком много запросов.");return(1);
           case 142:    Print("Ордер поставлен в очередь.");return(1);
           case 143:    Print("Ордер принят дилером к исполнению.");return(1);
           case 144:    Print("Ордер аннулирован самим клиентом при ручном подтверждении сделки.");return(1);
           case 145:    Print("Модификация запрещена, так как ордер слишком близок к рынку и заблокирован из-за возможного скорого исполнения.");return(1);
           case 146:    Print("Подсистема торговли занята.Пробуем ещё..");Sleep(500);return(1);
           case 147:    Print("Использование даты истечения ордера запрещено брокером.");return(1);
           case 148:    Print("Количество открытых и отложенных ордеров достигло предела, установленного брокером.");return(1);
           case 149:    Print("Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено.");return(1);
           case 4000:   return (0);
           case 4001:   Print("Неправильный указатель функции.");return(1);
           case 4002:   Print("Индекс массива - вне диапазона.");return(1);
           case 4003:   Print("Нет памяти для стека функций.");return(1);
           case 4004:   Print("Переполнение стека после рекурсивного вызова.");return(1);
           case 4005:   Print("На стеке нет памяти для передачи параметров.");return(1);
           case 4006:   Print("Нет памяти для строкового параметра.");return(1);
           case 4007:   Print("Нет памяти для временной строки.");return(1);
           case 4008:   Print("Неинициализированная строка.");return(1);
           case 4009:   Print("Неинициализированная строка в массиве.");return(1);
           case 4010:   Print("Нет памяти для строкового массива.");return(1);
           case 4011:   Print("Слишком длинная строка.");return(1);
           case 4012:   Print("Остаток от деления на ноль.");return(1);
           case 4013:   Print("Деление на ноль.");return(1);
           case 4014:   Print("Неизвестная команда.");return(1);
           case 4015:   Print("Неправильный переход.");return(1);
           case 4016:   Print("Неинициализированный массив.");return(1);
           case 4017:   Print("Вызовы DLL не разрешены.");return(1);
           case 4018:   Print("Невозможно загрузить библиотеку.");return(1);
           case 4019:   Print("Невозможно вызвать функцию.");return(1);
           case 4020:   Print("Вызовы внешних библиотечных функций не разрешены.");return(1);
           case 4021:   Print("Недостаточно памяти для строки, возвращаемой из функции.");return(1);
           case 4022:   Print("Система занята.");return(1);
           case 4050:   Print("Неправильное количество параметров функции.");return(1);
           case 4051:   Print("Недопустимое значение параметра функции.");return(1);
           case 4052:   Print("Внутренняя ошибка строковой функции.");return(1);
           case 4053:   Print("Ошибка массива.");return(1);
           case 4054:   Print("Неправильное использование массива-таймсерии.");return(1);
           case 4055:   Print("Ошибка пользовательского индикатора.");return(1);
           case 4056:   Print("Массивы несовместимы.");return(1);
           case 4057:   Print("Ошибка обработки глобальныех переменных.");return(1);
           case 4058:   Print("Глобальная переменная не обнаружена.");return(1);
           case 4059:   Print("Функция не разрешена в тестовом режиме.");return(1);
           case 4060:   Print("Функция не подтверждена.");return(1);
           case 4061:   Print("Ошибка отправки почты.");return(1);
           case 4062:   Print("Ожидается параметр типа string.");return(1);
           case 4063:   Print("Ожидается параметр типа integer.");return(1);
           case 4064:   Print("Ожидается параметр типа double.");return(1);
           case 4065:   Print("В качестве параметра ожидается массив.");return(1);
           case 4066:   Print("Запрошенные исторические данные в состоянии обновления.");return(1);
           case 4067:   Print("Ошибка при выполнении торговой операции.");return(1);
           case 4099:   Print("Конец файла.");return(1);
           case 4100:   Print("Ошибка при работе с файлом.");return(1);
           case 4101:   Print("Неправильное имя файла.");return(1);
           case 4102:   Print("Слишком много открытых файлов.");return(1);
           case 4103:   Print("Невозможно открыть файл.");return(1);
           case 4104:   Print("Несовместимый режим доступа к файлу.");return(1);
           case 4105:   Print("Ни один ордер не выбран.");return(1);
           case 4106:   Print("Неизвестный символ.");return(1);
           case 4107:   Print("Неправильный параметр цены для торговой функции.");return(1);
           case 4108:   Print("Неверный номер тикета.");return(1);
           case 4109:   Print("Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.");return(1);
           case 4110:   Print("Длинные позиции не разрешены. Необходимо проверить свойства эксперта.");return(1);
           case 4111:   Print("Короткие позиции не разрешены. Необходимо проверить свойства эксперта.");return(1);
           case 4200:   Print("Объект уже существует.");return(1);
           case 4201:   Print("Запрошено неизвестное свойство объекта.");return(1);
           case 4202:   Print("Объект не существует.");return(1);
           case 4203:   Print("Неизвестный тип объекта.");return(1);
           case 4204:   Print("Нет имени объекта.");return(1);
           case 4205:   Print("Ошибка координат объекта.");return(1);
           case 4206:   Print("Не найдено указанное подокно.");return(1);
           case 4207:   Print("Ошибка при работе с объектом.");return(1);
           return(0);
     }
     return(0);
  }