KimIV의 유용한 기능 - 페이지 111

 
Lisi4ka330 :
반환 ( StrToTime ( ye + " . " + mo + " .01 " )) 줄에 더하기가 있는 이유를 알려주십시오.
이 컨텍스트의 장점은 StringConcatenate() 함수를 대체합니다.
[Deleted]  
매우 감사합니다)))))
 

ProfitIFStopInCurrency() 함수

다른 날에는 포지션 그룹에 대해 스톱이 트리거될 때 예금 통화로 예상 손익을 반환하는 정보 패널 용 기능이 필요했습니다. 글쎄, 그런 기능을 작성하는 것은 처음이 아닙니다. 나는 오랫동안 여러 DC와 다양한 수익 계산 방법을 사용하는 다양한 도구에서 지루하게 테스트했습니다. Forex, CFD 및 Futures의 세 가지 방법이 이미 있습니다. Forex 가 어떻게 다른지 정말 찾을 수 없었습니다 및 Futures, 그러나 코드에서 다르게 계산할 가능성은 여전히 . 함수가 반환할 수 있는 최대 손실은 현재 계정 잔액의 크기에 의해 인위적으로 제한됩니다. 일반적으로 매개변수를 함수에 전달하여 분석에 필요한 위치를 필터링할 수 있습니다.

  • sy - 도구 이름. 이 매개변수를 설정하면 이 기능은 지정된 기기의 위치만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания стопа открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFStopInCurrency( string sy= "" , int op=- 1 , int mn=- 1 ) {
   if (sy== "0" ) sy= Symbol ();   // Текущий символ
   int     i, k= OrdersTotal (); // Подсчёт открытых позиций
   int     m;                   // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
   double l;                   // Размер контракта в базовой валюте инструмента
   double p;                   // Размер пункта в валюте котировки
   double t;                   // Минимальный шаг изменения цены инструмента в валюте котировки
   double v;                   // Размер минимального изменения цены инструмента в валюте депозита
   double s= 0 ;                 // Подсчёт стопа в валюте депозита

   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (mn< 0 || OrderMagicNumber ()==mn)) {
         if (( OrderType ()==OP_BUY || OrderType ()==OP_SELL) && (op< 0 || OrderType ()==op)) {
          l= MarketInfo ( OrderSymbol (), MODE_LOTSIZE);
          m= MarketInfo ( OrderSymbol (), MODE_PROFITCALCMODE);
          p= MarketInfo ( OrderSymbol (), MODE_POINT);
          t= MarketInfo ( OrderSymbol (), MODE_TICKSIZE);
          v= MarketInfo ( OrderSymbol (), MODE_TICKVALUE);
           if ( OrderType ()==OP_BUY) {
             if (m== 0 ) s-=( OrderOpenPrice ()- OrderStopLoss ())/p*v* OrderLots ();
             if (m== 1 ) s-=( OrderOpenPrice ()- OrderStopLoss ())/p*v/t/l* OrderLots ();
             if (m== 2 ) s-=( OrderOpenPrice ()- OrderStopLoss ())/p*v* OrderLots ();
            s+= OrderCommission ()+ OrderSwap ();
          }
           if ( OrderType ()==OP_SELL) {
             if ( OrderStopLoss ()> 0 ) {
               if (m== 0 ) s-=( OrderStopLoss ()- OrderOpenPrice ())/p*v* OrderLots ();
               if (m== 1 ) s-=( OrderStopLoss ()- OrderOpenPrice ())/p*v/t/l* OrderLots ();
               if (m== 2 ) s-=( OrderStopLoss ()- OrderOpenPrice ())/p*v* OrderLots ();
              s+= OrderCommission ()+ OrderSwap ();
            } else s=- AccountBalance ();
          }
        }
      }
    }
  }
   if ( AccountBalance ()+s< 0 ) s=- AccountBalance (); // Ограничение убытка балансом счёта
   return (s);
}

추신. ProfitIFStopInCurrency() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.

 

ProfitIFtakeInCurrency() 함수

이 함수는 이전 함수와 유사하지만 포지션 그룹에 대해 테이크가 트리거 될 때 예치 통화로 예상 손익을 반환합니다. 이익 계산 방법도 고려됩니다. 외환, CFD 및 선물. 함수가 반환할 수 있는 최대 이익은 인위적으로 999,999,999로 제한됩니다.

  • sy - 도구 이름. 이 매개변수를 설정하면 이 기능은 지정된 기기의 위치만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания тейка открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFTakeInCurrency( string sy= "" , int op=- 1 , int mn=- 1 ) {
   if (sy== "0" ) sy= Symbol ();   // Текущий символ
   int     i, k= OrdersTotal (); // Подсчёт открытых позиций
   int     m;                   // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
   double l;                   // Размер контракта в базовой валюте инструмента
   double p;                   // Размер пункта в валюте котировки
   double t;                   // Минимальный шаг изменения цены инструмента в валюте котировки
   double v;                   // Размер минимального изменения цены инструмента в валюте депозита
   double s= 0 ;                 // Подсчёт стопа в валюте депозита

   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (mn< 0 || OrderMagicNumber ()==mn)) {
         if (( OrderType ()==OP_BUY || OrderType ()==OP_SELL) && (op< 0 || OrderType ()==op)) {
          l= MarketInfo ( OrderSymbol (), MODE_LOTSIZE);
          m= MarketInfo ( OrderSymbol (), MODE_PROFITCALCMODE);
          p= MarketInfo ( OrderSymbol (), MODE_POINT);
          t= MarketInfo ( OrderSymbol (), MODE_TICKSIZE);
          v= MarketInfo ( OrderSymbol (), MODE_TICKVALUE);
           if ( OrderType ()==OP_BUY) {
             if ( OrderTakeProfit ()> 0 ) {
               if (m== 0 ) s+=( OrderTakeProfit ()- OrderOpenPrice ())/p*v* OrderLots ();
               if (m== 1 ) s+=( OrderTakeProfit ()- OrderOpenPrice ())/p*v/t/l* OrderLots ();
               if (m== 2 ) s+=( OrderTakeProfit ()- OrderOpenPrice ())/p*v* OrderLots ();
              s+= OrderCommission ()+ OrderSwap ();
            } else s= 999999999 ;
          }
           if ( OrderType ()==OP_SELL) {
             if (m== 0 ) s+=( OrderOpenPrice ()- OrderTakeProfit ())/p*v* OrderLots ();
             if (m== 1 ) s+=( OrderOpenPrice ()- OrderTakeProfit ())/p*v/t/l* OrderLots ();
             if (m== 2 ) s+=( OrderOpenPrice ()- OrderTakeProfit ())/p*v* OrderLots ();
            s+= OrderCommission ()+ OrderSwap ();
          }
        }
      }
    }
  }
   return (s);
}

추신. ProfitIFtakeInCurrency() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.

 
간행물 게시물에 대한 간략한 설명과 링크가 포함된 모든 기능 목록입니다.
파일:
 
안녕하세요! 테스터와 실제 거래를 위한 어드바이저를 더 쉽게 작성할 수 있는 템플릿(초보자용)이 있습니까? 뭔가 움직이지 않는다
 
Chuma :
안녕하세요! 테스터와 실제 거래를 위한 어드바이저를 더 쉽게 작성할 수 있는 템플릿(초보자용)이 있습니까? 뭔가 움직이지 않는다
견본? :)) 그래서 나의 조언자 를 출발점으로 삼으십시오...
[Deleted]  
KimIV :
견본? :)) 그래서 나의 조언자 를 출발점으로 삼으십시오...

감사합니다.... 일반적으로 상황은 흥미롭고 유용합니다.... 하지만 지금은 시작하기 위해 가장 단순한 신호(예: 평균 교차)에서 포지션을 열고 닫는 거래 고문을 만들 계획입니다. 이 모든 검사, 로트 결정 등 ... 무엇을, 언제, 어떻게 ... 복잡 ...

[Deleted]  
따라서 나는 템플릿에 대한 아이디어도 가지고있었습니다 .... "경험이 부족한 동지"를 지원합니다)))))))
[Deleted]  

이고르님 제가 자주 질문을 드려서 정말 죄송하고 너무 어려운 일이 아니길 진심으로 바랍니다.....무슨 뜻인지 알려주세요

 gbDisabled

온라인용 OpenPosition() 함수에서

다음은 코드의 일부입니다.

 // Блокировка работы советника
      if ( err == 2 || err == 64 || err == 65 || err == 133 ) {
        gbDisabled = True ; break ;
      }
      // Длительная пауза

컴파일할 때 변수가 정의되지 않았다는 오류가 발생합니다.