설정에서 기호 선택 - 페이지 2

 
Alexey Viktorov :

우리는 다른 것에 대해 이야기하고 있습니다.

네. 프로그램의 본문에서 이것은 쉽습니다.

그리고 테스터 매개변수 탭에서 최적화를 위한 매개변수 선택에 대해 이야기하고 있습니다.

 input  ... это показывает)

여기에 "시장 감시"의 기호 목록이 있으면 매우 편리합니다.

아무것도 변환할 필요가 없습니다. 공개 목록, 이미 만들어진 내부 목록에 올리기만 하면 됩니다...

 

더 추가, 커플

 enum Enum_Symbol {EURUSD,GBPUSD,USDCHF,USDJPY,USDCAD,AUDUSD,AUDNZD,AUDCAD,AUDCHF,AUDJPY,
                  CHFJPY,EURGBP,EURAUD,EURCHF,EURJPY,EURNZD,EURCAD,GBPCHF,GBPJPY,CADCHF
                 };
//--- Входящие параметры
input   Enum_Symbol     SIMBOL_1                 = EURUSD;         // Пара
input   Enum_Symbol     SIMBOL_2                 = EURUSD;         // Пара
input   Enum_Symbol     SIMBOL_3                 = EURUSD;         // Пара
 
Aleksandr Klapatyuk :

더 추가, 커플

글쎄요, 누군가가 도움이 될 것입니다)

이제 "시장 감시"창을이 목록과 동기화하는 것이 남아 있습니다 ... 실수가 아니라면 그런 기회가 어딘가에서 번쩍이는 것 같습니다.

그러나 준비된 목록이 있으면 더 쉬울 것입니다!

 
Alexey Viktorov :

우리는 다른 것에 대해 이야기하고 있습니다.

코드 삽입 - 열려 있는 모든 쌍을 계산하고 올바른 로트를 뺍니다. 나는 여기에서 어리석은 것 같습니다. 아마도 이 코드가 여기에 적합하지 않습니까?

그러나 , 전시 변경

 //+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double TradeSizeOptimized( void )
  {
   double price= 0.0 ;
   double margin= 0.0 ;
   string arr[];
   int resize = 0 , syTotal = SymbolsTotal ( true );
   for ( int i = 0 ; i < syTotal; i++)
     {
       string name = SymbolName (i, true );
       if ( SymbolInfoInteger (name, SYMBOL_VISIBLE ))
        {
         resize = ArrayResize (arr, i+ 1 );
         arr[i] = name;
        }
       //--- select lot size

       if (! SymbolInfoDouble (arr[i], SYMBOL_ASK ,price))
         return ( 0.0 );
       if (! OrderCalcMargin ( ORDER_TYPE_BUY ,arr[i], 1.0 ,price,margin))
         return ( 0.0 );
       if (margin<= 0.0 )
         return ( 0.0 );
     }
   double lot= NormalizeDouble ( AccountInfoDouble ( ACCOUNT_MARGIN_FREE )*MaximumRisk/margin, 2 );
//--- calculate number of losses orders without a break
   if (DecreaseFactor> 0 )
     {
       //--- select history for access
       HistorySelect ( 0 , TimeCurrent ());
       //---
       int     orders= HistoryDealsTotal ();   // total history deals
       int     losses= 0 ;                     // number of losses orders without a break

       for ( int y=orders- 1 ; y>= 0 ; y--)
        {
         ulong ticket= HistoryDealGetTicket (y);
         if (ticket== 0 )
           {
             Print ( "HistoryDealGetTicket failed, no trade history" );
             break ;
           }
         for ( int i = 0 ; i < syTotal; i++)
           {
             string name = SymbolName (i, true );
             if ( SymbolInfoInteger (name, SYMBOL_VISIBLE ))
              {
               resize = ArrayResize (arr, i+ 1 );
               arr[i] = name;
              }
             //--- check symbol
             if ( HistoryDealGetString (ticket, DEAL_SYMBOL )!=arr[i])
               continue ;
             //--- check Expert Magic number
             if ( HistoryDealGetInteger (ticket, DEAL_MAGIC )!=MA_MAGIC)
               continue ;
             //--- check profit
             double profit= HistoryDealGetDouble (ticket, DEAL_PROFIT );
             if (profit> 0.0 )
               break ;
             if (profit< 0.0 )
               losses++;
           }
        }
       //---
       if (losses> 1 )
         lot= NormalizeDouble (lot-lot*losses/DecreaseFactor, 1 );
     }
   for ( int i = 0 ; i < syTotal; i++)
     {
       string name = SymbolName (i, true );
       if ( SymbolInfoInteger (name, SYMBOL_VISIBLE ))
        {
         resize = ArrayResize (arr, i+ 1 );
         arr[i] = name;
        }
       //--- normalize and check limits
       double stepvol= SymbolInfoDouble (arr[i], SYMBOL_VOLUME_STEP );
      lot=stepvol* NormalizeDouble (lot/stepvol, 0 );
       double minvol= SymbolInfoDouble (arr[i], SYMBOL_VOLUME_MIN );
       if (lot<minvol)
         lot=minvol;
       double maxvol= SymbolInfoDouble (arr[i], SYMBOL_VOLUME_MAX );
       if (lot>maxvol)
         lot=maxvol;
     }
//--- return trading volume
   return (lot);
  }
//+------------------------------------------------------------------+

모르겠다 - 코드가 이 작업을 수행했다면

스냅샷222

 
Михаил :

글쎄요, 누군가가 도움이 될 것입니다)

이제 "시장 감시"창을이 목록과 동기화하는 것이 남아 있습니다 ... 실수가 아니라면 그런 기회가 어딘가에서 번쩍이는 것 같습니다.

그러나 준비된 목록이 있으면 더 쉬울 것입니다!

이것은 테스터에게 좋습니다. EA를 만들고 여러 쌍으로 테스트

 
Aleksandr Klapatyuk :

코드 삽입 - 열려 있는 모든 쌍을 계산하고 올바른 로트를 뺍니다. 나는 여기에서 어리석은 것 같습니다. 아마도 이 코드가 여기에 적합하지 않습니까?

그러나 , 전시 변경

모르겠다 - 코드가 이 작업을 수행했다면



그러나 거래를 성사시켜 이익을 고정한다면? )) 언제 녹색이 파란색에서 멀어졌습니까? n번째 값은? 마지막에 더 재미있을까?

 
Alexey Viktorov :

우리는 다른 것에 대해 이야기하고 있습니다.

올바르게 사용하는 방법?

사용하기 위해 - 등.

 enum Enum_Symbol {EURUSD,GBPUSD,USDCHF,USDJPY,USDCAD,AUDUSD,AUDNZD,AUDCAD,AUDCHF,AUDJPY,
                  CHFJPY,EURGBP,EURAUD,EURCHF,EURJPY,EURNZD,EURCAD,GBPCHF,GBPJPY,CADCHF
                 };
//--- Входящие параметры
input Enum_Symbol     SIMBOL_1                 = EURUSD;   // Пара
input Enum_Symbol     SIMBOL_2                 = EURUSD;   // Пара
input Enum_Symbol     SIMBOL_3                 = EURUSD;   // Пара

작동하려면 다른 작업을 수행해야 합니다.

코드를 사용하는 방법?

 //+------------------------------------------------------------------+
//| function                                                         |
//+------------------------------------------------------------------+
void XXXXXX()
  {
   string arr[];
   int resize = 0 , syTotal = SymbolsTotal ( true );
   for ( int i = 0 ; i < syTotal; i++)
     {
       string name = SymbolName (i, true );
       if ( SymbolInfoInteger (name, SYMBOL_VISIBLE ))
        {
         resize = ArrayResize (arr, i+ 1 );
         arr[i] = name;
        }
     };
  };
//+------------------------------------------------------------------+
 
Aleksandr Klapatyuk :

올바르게 사용하는 방법?

사용하기 위해 - 등.

작동하려면 다른 작업을 수행해야 합니다.

코드를 사용하는 방법?


문자 배열을 채우고 이 배열로 작업하십시오.

다음은 주어진 코드를 사용하는 무료 고문입니다 ***


추신; 양, 당신은 링크를 삭제하지 말았어야. 시중에 나와 있는 내 제품 중 유료 제품은 2개뿐이다. 2017년에 하나는 4번 임대했고 2014년에 두 번째는 10달러에 산 적이 없습니다. 그래서 여기에는 광고가 없습니다.

 
Alexey Viktorov :

...양아, 링크를 삭제하지 말았어야 했어....

중재자가 포럼을 읽고 있기 때문에 그러한 목록의 모양을 충분히 얻을 수 있습니다!

 
Alexey Viktorov :

문자 배열을 채우고 이 배열로 작업하십시오.

다음은 주어진 코드를 사용하는 무료 고문입니다 ***


추신; 양, 당신은 링크를 삭제하지 말았어야. 시중에 나와 있는 내 제품 중 유료 제품은 2개뿐이다. 2017년에 하나는 4번 임대했고 2014년에 두 번째는 10달러에 산 적이 없습니다. 그래서 여기에는 광고가 없습니다.

불행히도 포럼에서 마켓의 어떤 것도 토론할 수 없습니다. 유료도, 무료도 아닙니다. 그것은 백 번 말한 것입니다. 시간이있을 것입니다-당신 자신이 검색을 찾을 수 있습니다.