다중 통화 고문에 대한 질문 - 페이지 3

 

컴포터님 감사합니다. 하기 시작했습니다!

하지만 여기서 또 다른 질문이 나옵니다! 내 Expert Advisor에서 개시 위치 및 후행 블록은 별도로 위치합니다.

 int start ()
  {
// ЗАДАЕМ ПЕРЕМЕННЫЕ ДЛЯ ВСЕХ ПАР
 
 
 // ОТКРЫВАЕМ ПОЗИЦИИ ПО ВСЕМ ПАРАМ
 
//----------------------------------------------
// -------- ТРЕЙЛИНГ СТОПЫ -----------------------
if ( UseTrailing_ == True )                                             {                  
for ( int r = 0 ; r < OrdersTotal () ; r ++ )                                    {
    if ( OrderSelect ( r , SELECT_BY_POS , MODE_TRADES ))                     {
//--------------------------------------------------
     if ( OrderSymbol () == " GBPUSD " && OrderMagicNumber () == MagicGBPUSD )     
      {  Трейлинг по фунту }
//--------------------------------------------------
     if ( OrderSymbol () == " EURUSD " && OrderMagicNumber () == MagicEURUSD )     
      {  Трейлинг по евро }
//--------------------------------------------------------------------
                                                                       }
                                                                      }
                                                                     }
//----------------------------------------------------------------------
   } 
  return ( 0 ) ;
이제 후행에 코드(예: 파운드)를 삽입합니다.

 double bid_GBP = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double ask_GBP = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double point_GBP = MarketInfo ( " GBPUSD " , MODE_POINT ) ;

그러나 나는 파운드에서 포지션을 열었을 때 이미 이 조각을 사용했습니다. 이제 트롤에서 같은 조각을 다시 사용할 수 있습니까? 아니면 이 값에 대해 약간 다른 이름을 가진 유사한 부분을 파운드 트레일에 도입해야 합니까?

 
rid :
이제 후행에 코드(예: 파운드)를 삽입합니다.
 double bid_GBP = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double ask_GBP = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double point_GBP = MarketInfo ( " GBPUSD " , MODE_POINT ) ;

그러나 나는 파운드에서 포지션을 열었을 때 이미 이 조각을 사용했습니다. 이제 트롤에서 같은 조각을 다시 사용할 수 있습니까? 아니면 이 값에 대해 약간 다른 이름을 가진 유사한 부분을 파운드 트레일에 도입해야 합니까?

start() 함수의 맨 처음에 "이 조각"을 삽입하고 모든 블록의 변수 값을 사용할 수 있습니다.
 

pts. 당신의 답변에 감사드립니다! , 퇴비화기 !

그리고 마지막으로 중요한 질문. (너무 거슬리는 것 같아 겁이 나지만...) -

세 번째 쌍의 경우 (여러 가지 이유로) 후행 라이브러리를 호출합니다. 예를 들어 라이브러리 폴더에서.

이 경우 어떻게 해야 합니까? 이 쌍에 대해 라이브러리 내부에 유사하게 설정해야 합니까?

 //RefreshRates();
 double bid = MarketInfo ( " USDCHF " , MODE_BID ) ;
 double ask = MarketInfo ( " USDCHF " , MODE_ASK ) ;
 double point = MarketInfo ( " USDCHF " , MODE_POINT ) ;

그리고 acc. 기호 및 마법 변경:

 ... .... .....
if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MAGIC ) {
        if ( OrderType () == OP_BUY ) {
          if ( ! ProfitTrailing || ( Bid - OrderOpenPrice ()) > TrailingStop * Point ) {
            if ( OrderStopLoss () < Bid - ( TrailingStop + TrailingStep - 1 ) * Point ) {
              ModifyStopLoss ( Bid - TrailingStop * Point , clModifyBuy ) ; 
 .... ... ...
 
rid :

세 번째 쌍의 경우 (여러 가지 이유로) 후행 라이브러리를 호출합니다. 예를 들어 라이브러리 폴더에서.
이 경우 어떻게 해야 합니까? 라이브러리 내부에서도 비슷하게 설정해야 합니까?

라이브러리에 따라 다릅니다. 그녀가 기본이 아닌 기호의 순서로 작업하는 방법을 알고 있다면 문제가 없을 것입니다. 그리고 당신이 할 수 없다면 그것은 나쁠 것입니다 ;)
 

Kim의 3단계 출력 라이브러리입니다. 이제 코드로 들어가 보겠습니다. 그는 상징 대신에 쌍의 이름을 사방에 배치하고 마술사 대신에 그는 쌍의 마술사를 배치했습니다.

 //+------------------------------------------------------------------+
//|                                                  a-TLE_v.1.6.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  v.1.6  Три уровня переноса стопа.                               |
//| 23.11.2005 v.a1.6  Реализация в виде универсального модуля.      |
//|                                                                  |
//|   Для использования добавить строку в модуле start               |
//|   if (UseTrailing) TrailingPositions();                          |
//+------------------------------------------------------------------+
 
//------- Внешние параметры модуля - уровни переноса--------------------
... ... ... ...
 
//+------------------------------------------------------------------+
//| Сопровождение позиций                                            |
//+------------------------------------------------------------------+
void TrailingPositions ()                                  {
  for ( int i = 0 ; i < OrdersTotal () ; i ++ )                       {
    if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ))           {
      if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MAGIC ) {
        ThreeLevelSystemOfOutput () ;
      }
    }
  }
}
 
//+------------------------------------------------------------------+
//| Трёхуровневая система выходов                                    |
//+------------------------------------------------------------------+
void ThreeLevelSystemOfOutput ()                      {
   int sp = MarketInfo ( OrderSymbol () , MODE_SPREAD ) ;
  if ( бла-бла-бла )                                  {
    SimpleTrailingPositions () ;
                                                      }
                                                      }
 
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void SimpleTrailingPositions () {
  double pBid , pAsk , pp = MarketInfo ( OrderSymbol () , MODE_POINT ) ;
... ... ...
   
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
... ... ...
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLossInPoint ( int pp ) {
    double ldSL = 0 , mp = MarketInfo ( OrderSymbol () , MODE_POINT ) ;  
 ... ... ...  
//+------------------------------------------------------------------+
//| Возвращает профит позиции в пунктах                              |
//+------------------------------------------------------------------+
int ProfitPosition () {
  double pBid , pAsk , pp = MarketInfo ( OrderSymbol () , MODE_POINT ) ;
  double pr = 0 ;
 
  if ( OrderType () == OP_BUY ) {
    pBid = MarketInfo ( OrderSymbol () , MODE_BID ) ;
    pr = ( pBid - OrderOpenPrice ()) / pp ;
  }
  if ( OrderType () == OP_SELL ) {
    pAsk = MarketInfo ( OrderSymbol () , MODE_ASK ) ;
    pr = ( OrderOpenPrice () - pAsk ) / pp ;
  }
  return ( MathRound ( pr )) ;
}
 
//+------------------------------------------------------------------+
//| Возвращает StopLoss позиции в пунктах                            |
//+------------------------------------------------------------------+
int StopLossInPoint () {
  double pp = MarketInfo ( OrderSymbol () , MODE_POINT ) ;
  double sp = 0 ;
 
  if ( OrderType () == OP_BUY ) {
    sp = ( OrderStopLoss () - OrderOpenPrice ()) / pp ;
  }
  if ( OrderType () == OP_SELL ) {
    sp = ( OrderOpenPrice () - OrderStopLoss ()) / pp ;
  }
  if ( OrderStopLoss () == 0 ) sp =- OrderOpenPrice () / pp ;
  return ( MathRound ( sp )) ;
}
//+------------------------------------------------------------------+

그것은 볼 수 있습니다 - 눈에서 다양한

 MarketInfo ( OrderSymbol () , MODE_POINT ) ;
MarketInfo ( OrderSymbol () , MODE_BID ) ;
MarketInfo ( OrderSymbol () , MODE_ASK ) ;

그리고 이것은 거의 모든 작업에 있습니다!

하지만 처음에는 기호(커플 표시)와 마법만 교체했습니다. ! tf=1min에 온라인으로 어드바이저를 시작했습니다. 나는 이익을 기다렸고 이 쌍에서 정류장을 옮겼습니다. 모든 것이 잘 작동하는 것 같습니다. 기준 이 라이브러리의 알고리즘으로

그러나 다른 두 쌍(자체 트레일 포함)의 경우 이 Expert Advisor는 아직 수익을 얻지 못했습니다.

내일 온라인으로 봐야겠습니다.

 
rid :

Kim의 3단계 출력 라이브러리입니다. 이제 코드로 들어가 보겠습니다. 그는 상징 대신에 쌍의 이름을 사방에 배치하고 마술사 대신에 그는 쌍의 마술사를 배치했습니다.

...

그것은 볼 수 있습니다 - 눈에서 다양한

 MarketInfo ( OrderSymbol () , MODE_POINT ) ;
MarketInfo ( OrderSymbol () , MODE_BID ) ;
MarketInfo ( OrderSymbol () , MODE_ASK ) ;
라이브러리가 올바르게 작성되었습니다. 차트 도구에 대한 바인딩이 없습니다.
따라서 수정 없이 사용할 수 있습니다.
 

다시 한 번 komposter님, 답변에 감사드립니다!

이제 저는 전문가 고문 세 쌍 모두의 이익을 위해 온라인으로 기다렸습니다. 각 쌍은 트롤의 모드에 따라 작동하는 것 같습니다! 도서관에 전화하는 커플도 포함!

 
komposter :
제거 :

Kim의 3단계 출력 라이브러리입니다. 이제 코드로 들어가 봅시다. 그는 상징 대신에 쌍의 이름을 사방에 배치하고 마술사 대신에 그는 쌍의 마술사를 배치했습니다.

...

그것은 볼 수 있습니다 - 눈에서 다양한

 MarketInfo ( OrderSymbol () , MODE_POINT ) ;
MarketInfo ( OrderSymbol () , MODE_BID ) ;
MarketInfo ( OrderSymbol () , MODE_ASK ) ;
라이브러리가 올바르게 작성되었습니다. 차트 도구에 대한 바인딩이 없습니다.
따라서 수정 없이 사용할 수 있습니다.

나는 내 자신의 버전을 힙에 던질 것입니다 ... 잘린 코드 :


 extern int    MagicNum = 400400, Stop = 33 ;
extern double Lot1 = 0.3 ;
int LotStop [ 8 ] = { 28 , 33 , 43 , 33 , 33 , 33 , 33 , 33 } ; //можно юзать просто Stop
 
//| Start function                                                   |
//+------------------------------------------------------------------+
void start ()
{ 
 int i , SymPermitted = 3 ;
 string Symbols [ 8 ] = { " EURUSD " , " GBPUSD " , " USDJPY " , " EURJPY " , " USDCHF " , " Reserved " , " Reserved " , " Reserved " } ;
 
  // Ma defence
  if ( Bars < 100 )
    return ( 0 ) ;  
  
  for ( i = 0 ; i < SymPermitted ; i ++ )
  {
    // Compile/reload/crash config defence
    if      ( Symbols [ i ] == " EURUSD " ) { Stop = 28 ; Lot1 = 0.6 ; }
    else if ( Symbols [ i ] == " GBPUSD " ) { Stop = 33 ; Lot1 = 0.2 ; }
    else if ( Symbols [ i ] == " USDJPY " ) { Stop = 43 ; Lot1 = 0.6 ; }
    Sleep ( 1000 ) ; // Просто так
    Checking ( Symbols [ i ] , i ) ;
  }
  return ( 0 ) ;
}
 
void Checking ( string Sym , int LotStopIndex )
{
 int Total , LotStop = LotStop [ LotStopIndex ] , i , j , Tic = 0 ;
 double VPoint , VAsk , VBid ;
 
   Total = OrdersTotal () ;
 
   // Check opened
   for ( i = 0 ; i < Total ; i ++ )
   {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) == true )
     {  
       if ( OrderSymbol () == Sym && OrderMagicNumber () == MagicNum )
         return ( 0 ) ;
     }
   }
   
   VPoint = MarketInfo ( Sym , MODE_POINT ) ;
   //... кучка кода расчётов
   Total = HistoryTotal () ;
   
   if ( Total == 0 )
   { // Reset to default
     LotSize = Lot1 ;
     LotStop [ LotStopIndex ] = Stop ;
   }
   
   for ( i = 0 ; i < Total ; i ++ )
   {
     if ( OrderSelect ( Total - i - 1 , SELECT_BY_POS , MODE_HISTORY ) == true )
     { 
       if ( OrderSymbol () == Sym && OrderMagicNumber () == MagicNum )
       { // Was loss (Alpari иногда выбивает положительные лосы и отрицательные профиты... мистика
         if ((( OrderProfit ()) < 0 ) || ( OrderClosePrice () == OrderStopLoss ()))
         { ..код
         }
           
         else
         { // Reset to default
           LotSize = Lot1 ;
           LotStop [ LotStopIndex ] = Stop ;
         }
         break ;
       }
     }
 
     else
     {
       Print ( " Ошибка < " , GetLastError () , " > при выборе хистори - ордера " ) ;
       return ( 1 ) ;
     }
  }
 
  if ( AccountFreeMarginCheck ( Sym , OP_BUY , LotSize ) <= 0 ) 
  {  return ( 0 ) ; }
 
  
  VAsk = MarketInfo ( Sym , MODE_ASK ) ;
  VBid = MarketInfo ( Sym , MODE_BID ) ;
  // bay|sell...
  
  if (условие 1)
    Tic = OrderSend ( Sym , OP_BUY , LotSize , VAsk , 3 , VAsk - LotStop [ LotStopIndex ] * VPoint , VAsk + LotStop * VPoint , " CMATest5m " , MagicNum , 0 , Lime ) ;
    
  else if (условие 2 )
    Tic = OrderSend ( Sym , OP_SELL , LotSize , VBid , 3 , VBid + LotStop [ LotStopIndex ] * VPoint , VBid - LotStop * VPoint , " CMATest5m " , MagicNum , 0 , Red ) ;
  
  if ( Tic <= 0 )
  {
    Print ( " Ошибка < " , GetLastError () , " > при запросе ордера " ) ;
    Sleep ( 60000 ) ; // Ждём минуту... рынок никуда не убежит :-)...
  }
}
 

VassaV, 여기에 게시한 내용과 사용 방법에 대해 조금 더 알려주세요.

"컷 코드"라는 표현은 무엇을 의미합니까?

왜 3번째 줄에 댓글이 없습니까? //사용할 수 있나요...?

 
rid :

VassaV, 여기에 게시한 내용과 사용 방법에 대해 조금 더 알려주세요.

"컷 코드"라는 표현은 무엇을 의미합니까?

왜 3번째 줄에 댓글이 없습니까? //사용할 수 있나요...?


다진 - 베이스만 남도록 감소됨을 의미합니다. 사용 방법 - 스스로 생각하십시오. 여기 예가 있습니다.

각기:

//... 많은 계산 코드 - 여기에 신호/표시기 처리 코드가 있습니다.

// ..code - 다음은 손실 처리를 위한 고유한 코드입니다.

조건 1 - 구매/판매 조건에 대한 코드입니다.

//사용할 수 있나요...? - 이것은 단지 이렇게 표시되는 주석입니다.

배열을 사용하여 각 통화의 매개변수를 저장하거나 코드에 매개변수를 저장할 수 있음을 의미합니다.

(섹션 // 컴파일/재로드/크래시 구성 방어)