포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 386

 
alexey1979621 :
감사합니다. 코드를 정리했습니다. 실제로 오프닝에 오류가 있습니다(눈이 이미 흐릿함). 저는 변환된 Expert Advisor를 데모에 넣었습니다. 여기에서 우리 Magic의 포지션은 이미 총 흑자 수익으로 열려 있습니다. 그러나 포지션은 폐쇄되지 않았다.

새 코드(게시물의 아래에 있음)를 살펴보니 함수에 전달된 기본 매개변수가 변경되었습니다.

 int NumberOfPositions( string sy= "" , int op=- 1 , int mn= 1114 )

원래 버전에는 다른 Magik이있었습니다. 내 코드에서 이 함수에 대한 호출을 수정했습니다. 현재 어떤 Magic 주문이 열려 있는지 확인하고 이 Magic 번호를 Expert Advisor에 입력하십시오.

추신 그리고 변수 이름을 지정할 때 다른 인코딩을 사용하는 것은 좋은 어조의 표시가 아닙니다... 제가 말하는 것은:

 extern string Сomment           = "KVAZ_EURUSD_GBPUSD" ;
 
Roger :


이 줄을 봐

else if (order_type = OP_SELL()

 if (order_type = OP_BUY )
 
TarasBY :

새 코드(게시물의 아래에 있음)를 살펴보니 함수에 전달된 기본 매개변수가 변경되었습니다.

원래 버전에는 다른 Magik이있었습니다. 내 코드에서 이 함수에 대한 호출을 수정했습니다. 현재 어떤 Magic 주문이 열려 있는지 확인하고 이 Magic 번호를 Expert Advisor에 입력하십시오.


아니요, 마술에 따르면 모든 것이 정확합니다. EURAUD_AUDUSD에 대한 것은 1111이고 EURUSD_GBPUSD에 대한 것은 1114입니다(다른 사람이 수정을 도왔습니다). 두 거래 모두 성사되지 않았습니다. EURUSD_GBPUSD에 대한 총 이익을 지켜보고 있지만 어드바이저와 함께 마감할 수 없습니다. EURAUD_AUDUSD - 1111에 대한 변형을 EURUSD_GBPUSD로 변경했습니다. - 1114도 거래를 마감하지 않습니다. 올빼미의 특징은 테스터에서 확인할 수 없다는 것입니다 (두 쌍이 경매에 참여하기 때문에) - 데모에서만.
 
alexey1979621 :

아니요, 마술에 따르면 모든 것이 정확합니다. EURAUD_AUDUSD에 대한 것은 1111이고 EURUSD_GBPUSD에 대한 것은 1114입니다(다른 사람이 수정을 도왔습니다). 두 거래 모두 성사되지 않았습니다. EURUSD_GBPUSD에 대한 총 이익을 지켜보고 있지만 어드바이저와 함께 마감할 수 없습니다. EURAUD_AUDUSD - 1111에 대한 변형을 EURUSD_GBPUSD로 변경했습니다. - 1114도 거래를 마감하지 않습니다. 올빼미의 특징은 테스터에서 확인하는 것이 불가능하다는 것입니다 (두 쌍이 경매에 참여하기 때문에) - 데모에서만.


몇 가지 변경해 보겠습니다. 대신에

 if (prof>=Profit)
   {
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) 
      {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
     double AS= MarketInfo ( OrderSymbol (), MODE_ASK );
     double BI= MarketInfo ( OrderSymbol (), MODE_BID );

       if ( OrderType ()== OP_BUY ) price=BI;
       else                     price=AS;

       OrderClose ( OrderTicket (), OrderLots (),price, 3 ,CLR_NONE);
         }
      }   
   }

놓다

 Comment ( "Profit = " ,prof);
if (prof>=Profit)
   {
Print ( "Profit is good!" );
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) 
      {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
     double AS= MarketInfo ( OrderSymbol (), MODE_ASK );
     double BI= MarketInfo ( OrderSymbol (), MODE_BID );

       if ( OrderType ()== OP_BUY ) price=BI;
       else                     price=AS;
       Print ( "OrderTicket - " , OrderTicket (), " price - " ,price);
       if (! OrderClose ( OrderTicket (), OrderLots (),price, 3 ,CLR_NONE)) Print ( "Error - " ,GetLastError());
         }
      }   
   }
어드바이저를 실행하고 이익을 0으로 설정하고 무슨 일이 일어나고 로그에 무엇이 있는지 확인하십시오.
 
Roger :


이 줄을 봐

else if (order_type = OP_SELL()


고맙습니다!)
 
alexey1979621 :

아니요, 마술에 따르면 모든 것이 정확합니다. EURAUD_AUDUSD에 대한 것은 1111이고 EURUSD_GBPUSD에 대한 것은 1114입니다(다른 사람이 수정을 도왔습니다). 두 거래 모두 성사되지 않았습니다. EURUSD_GBPUSD에 대한 총 이익을 지켜보고 있지만 어드바이저와 함께 마감할 수 없습니다. EURAUD_AUDUSD - 1111에 대한 변형을 EURUSD_GBPUSD로 변경했습니다. - 1114도 거래를 마감하지 않습니다. 올빼미의 특징은 테스터에서 확인하는 것이 불가능하다는 것입니다 (두 쌍이 경매에 참여하기 때문에) - 데모에서만.

첫째, 지표를 올바르게 참조하지 않습니다. 이 표시기에는 많은 외부 매개변수가 있습니다.

 extern string Symbol1.Name      = "EURUSD" ; // Название инструмента 1
extern bool    Symbol1.Reverse   = false ;   // Является ли инструмент 1 реверсивным (с обратной корреляцией) 
                                           // по отношению к остальным инструментам
extern string Symbol2.Name      = "USDCHF" ; // Название инструмента 2
extern bool    Symbol2.Reverse   = false ;   // Является ли инструмент 2 реверсивным (с обратной корреляцией) 
                                           // по отношению к остальным инструментам
extern string   ___MISC___       = " == Прочие настройки ==========" ;
extern bool    UseVolatility     = True ;   //отрисовка с учетом волатильности
extern bool    Triangle          = True ;   // Рисовать треугольник?
extern color   Triangle.Color    = DarkSalmon; // Цвет треугольника
extern double Alert .ChannelMore = EMPTY ;   // Если ширина канала больше указанной, включается сигнал
                                           //   -1 - контроль выключен.
extern double Alert .ChannelLess = EMPTY ;   // Если ширина канала меньше указанной, включается сигнал
                                           //   -1 - контроль выключен.
extern string   __VOL___         = " == Расчет объемов ====" ;
extern int VOL.Mode             = 3 ;       // Режим расчета объемов для торговли
                                           //   1 - по ценам открытия
                                           //   2 - по волатильности, а если невозможно - по ценам открытия
                                           //   3 - по волатильности (если возможно) и ценам открытия
extern int VOL.PeriodATR        = 144 ;             // Период усреднения ATR 
extern string   ___MA___         = " == Параметры МА ценовых линий ====" ;

extern int MA.Slow              = 21 ;       // Период медленной МА
extern int MA.Fast              = 8 ;       // Период быстрой МА
extern int MA.Method            = 2 ;       // Метод аппроксимации
                                           // - MODE_SMA=0 Простое скользящее среднее 
                                           // - MODE_EMA=1 Экспоненциальное скользящее среднее 
                                           // - MODE_SMMA=2 Сглаженное скользящее среднее 
                                           // - MODE_LWMA=3 Линейно-взвешенное скользящее среднее 
extern int MA.Price             = 6 ;       // Расчетная цена:
                                           // - PRICE_CLOSE=0 Цена закрытия 
                                           // - PRICE_OPEN=1 Цена открытия 
                                           // - PRICE_HIGH=2 Максимальная цена 
                                           // - PRICE_LOW=3 Минимальная цена 
                                           // - PRICE_MEDIAN=4 Средняя цена, (high+low)/2 
                                           // - PRICE_TYPICAL=5 Типичная цена, (high+low+close)/3 
                                           // - PRICE_WEIGHTED=6 Взвешенная цена закрытия, (high+low+close+close)/4 

표시기를 호출할 때 열거해야 합니다. 생략하면 기본적으로 매개변수가 사용되며 다른 통화 쌍에 사용하려고 하므로 이 옵션은 적합하지 않습니다. 그리고 어드바이저를 시작할 때 매개변수의 변경을 고려하여 다른 모든 작업을 수행할 수 있습니다.

 extern string Symbol_1 = "EURAUD" ;
extern string Symbol_2 = "AUDUSD" ;
extern double Lot_1= 0.01 ;
extern double Lot_2= 0.01 ;
extern double Profit= 10 ;
extern string EXP_Comment           = "KVAZ_" ;
extern int     Magic                 = 1111 ;

string gsa_SMB[ 2 ];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  gsa_SMB[ 0 ] = Symbol_1;
  gsa_SMB[ 1 ] = Symbol_2;
  EXP_Comment = StringConcatenate (EXP_Comment, Symbol_1, "_" , Symbol_2);
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
     int     li_N;
     double prof = 0 ., ld_Price = 0 .;

     for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
    {
        OrderSelect (i, SELECT_BY_POS );
        li_N = fGet_NumSymbol ( OrderSymbol (), gsa_SMB);
        if (li_N < 0 ) continue ;
        if ( OrderMagicNumber () != Magic) continue ;
        prof += OrderProfit ();
         Print ( "Profit=" , prof);
    }
     if (prof >= Profit)
    {
         for (i = OrdersTotal () - 1 ; i >= 0 ; i--)
        {
             OrderSelect (i, SELECT_BY_POS );
            li_N = fGet_NumSymbol ( OrderSymbol (), gsa_SMB);
            if (li_N < 0 ) continue ;
            if ( OrderMagicNumber () != Magic) continue ;
            if ( OrderType () == OP_BUY ) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_BID );
            else if ( OrderType () == OP_SELL ) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_ASK );
             OrderClose ( OrderTicket (), OrderLots (), ld_Price, 5 );
        }
    }
     double lda_Price[ 2 ],
           Line_1 = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 0 , 1 ), // Первый инструмент
           Line_2 = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 1 , 1 ); // Второй инструмент

     if (NumberOfPositions (gsa_SMB[ 0 ], - 1 , Magic) == 0 )
    {
        lda_Price[ 0 ] = MarketInfo (gsa_SMB[ 0 ], MODE_BID );
        lda_Price[ 1 ] = MarketInfo (gsa_SMB[ 0 ], MODE_ASK );
         if (Line_1 > 0.1 ) if (Line_2 < - 0.1 )
        { OrderSend (gsa_SMB[ 0 ], OP_SELL , Lot_1, lda_Price[ 0 ], 3 , 0 , 0 , EXP_Comment, Magic, 0 , Red);}
         if (Line_1 < - 0.1 ) if (Line_2 > 0.1 )
        { OrderSend (gsa_SMB[ 0 ], OP_BUY , Lot_1, lda_Price[ 1 ], 3 , 0 , 0 , EXP_Comment, Magic, 0 , Blue);}
    }
     if (NumberOfPositions (gsa_SMB[ 1 ], - 1 , Magic) == 0 )
    {
        lda_Price[ 0 ] = MarketInfo (gsa_SMB[ 1 ], MODE_BID );
        lda_Price[ 1 ] = MarketInfo (gsa_SMB[ 1 ], MODE_ASK );
        if (Line_1 < - 0.1 ) if (Line_2 > 0.1 )
        { OrderSend (gsa_SMB[ 1 ], OP_BUY , Lot_2, lda_Price[ 1 ], 3 , 0 , 0 , EXP_Comment, Magic, 0 , Blue);}
        if (Line_1 > 0.1 ) if (Line_2 < - 0.1 )
        { OrderSend (gsa_SMB[ 1 ], OP_SELL , Lot_2, lda_Price[ 0 ], 3 , 0 , 0 , EXP_Comment, Magic, 0 , Red);}
    }
     return ( 0 );
}
//+------------------------------------------------------------------+
int fGet_NumSymbol ( string fs_Symbol, string ar_SMB[])
{
     for ( int li_IND = 0 ; li_IND < 2 ; li_IND++)
    { if (fs_Symbol == ar_SMB[li_IND]) return (li_IND);}
    return (- 1 );
}
//+------------------------------------------------------------------+
int NumberOfPositions( string sy= "" , int op=- 1 , int mn= 1111 )
{
   int i, k= OrdersTotal (), kp= 0 ;
   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) kp++;
          }
        }
      }
    }
  }
   return (kp);
}
//+------------------------------------------------------------------+

표시기 호출에 대한 자세한 내용은 여기를 참조하십시오 .

 
Roger :


몇 가지 변경해 보겠습니다. 대신에

놓다

어드바이저를 실행하고 이익을 0으로 설정하고 무슨 일이 일어나고 로그에 무엇이 있는지 확인하십시오.


그것은 끔찍하게 밝혀졌습니다. 변경 사항과 이익이 0이면 Expert Advisor는 Magics 1111, 1112, 1113, 1114, 1115의 모든 포지션을 청산했습니다. 그런 다음 5초 후에 이 Magics에 대한 새 주문이 열렸고 10초 후에 모두 닫히고 모든 것이 다시 반복되었습니다. 동시에 위치는 쌍이 아니라 무작위로 열렸습니다.
 
alexey1979621 :

그것은 끔찍하게 밝혀졌습니다. 변경 사항과 이익이 0이면 Expert Advisor는 Magics 1111, 1112, 1113, 1114, 1115의 모든 포지션을 청산했습니다. 그런 다음 5초 후에 이 Magics에 대한 새 주문이 열렸고 10초 후에 모두 닫히고 모든 것이 다시 반복되었습니다. 동시에 위치는 쌍이 아니라 무작위로 열렸습니다.


주요 질문 - 이 계정에 몇 명의 고문이 있습니까?

그리고 당신에게는 이익에 대한 모든 주문을 마감하는 조건이 있었습니다.

추신: 이 Expert Advisor에 어떤 함정이 있는지 보셨을 것입니다. 이는 마감 후에도 계속해서 주문을 열어 결국 고갈될 것입니다. 따라서 조건이 지나고 다시 발생할 때까지 신규 주문을 금지하는 플래그를 설정할 필요가 있습니다.

 
TarasBY :

첫째, 지표를 올바르게 참조하지 않습니다. 이 표시기에는 많은 외부 매개변수가 있습니다.

표시기를 호출할 때 열거해야 합니다. 생략하면 기본적으로 매개변수가 사용되며 다른 통화 쌍에 사용하려고 하므로 이 옵션은 적합하지 않습니다. 그리고 어드바이저를 시작할 때 매개변수의 변경을 고려하여 다른 모든 작업을 수행할 수 있습니다.

표시기 호출에 대한 자세한 내용은 여기를 참조하십시오 .

고맙습니다. 표시기 호출에 대해 알고 있습니다. 그러나 테스트 중이나 직장에서 사용할 때 표시기의 조정 가능한 매개 변수를 나열해야하며이 Expert Advisor는 테스터에서 테스트 할 수 없으므로 (두 쌍이 거래에 참여하기 때문에) 이러한 매개 변수를 선택하는 것은 단순히 불가능합니다. 역사. 마지막 옵션은 이미 데모에 포함되었으며 거래가 열렸습니다. 거래가 어떻게 마감되는지 지켜보겠습니다. 두 가지 상품에 대한 또 다른 작은 질문입니다. 거래는 매도 또는 매수 중 하나지만, 한 상품에 대해 매도하고 다른 상품에 대해 매수를 해야 하는 경우 어떻게 해야 합니까? 찔러보니 안되네요..... 다시한번 작업해주셔서 감사합니다.
 
Roger :


주요 질문 - 이 계정에 몇 명의 고문이 있습니까?

그리고 당신에게는 이익에 대한 모든 주문을 마감하는 조건이 있었습니다.

추신: 이 Expert Advisor에 어떤 함정이 있는지 보셨을 것입니다. 이는 마감 후에도 계속해서 주문을 열어 결국 고갈될 것입니다. 따라서 조건이 지나고 다시 발생할 때까지 신규 주문을 금지하는 플래그를 설정할 필요가 있습니다.


5명의 고문(쌍둥이 형제 - 서로 다른 쌍)이 있었고 자연스럽게 다른 마법을 사용했습니다.


예, 주문을 마감하는 이익 조건이 있었지만 마법 1114와 같은 특정 고문과 관련된 주문. 나는 처음부터 이것에 대해 썼습니다. 올빼미는 닫을 때 단순히 자신의 주문을 보지 못하지만 그는 모든 것을 보고 정말로 가까이 있기를 원하지만 모두가 아니라 특정한 것이 필요합니다.

나는 함정을 보았지만 그렇게 수중이 아닙니다. H4 기간을 취 하면 지표 라인이 0.1 이상 -0.1 이하일 때 조건이 충족되고 거래가 열립니다. 하나의 신호로 여러 이익을 얻을 수 있습니다(지시선이 수렴할 때 거래를 마감하는 옵션도 있음).