[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 706

 

생성된 화살표 표시기 . 신의 도움으로 그들은 무엇을 이해했는지 창조했습니다. 이제 나는 결합하여 2를 하나로 만들기로 결정했습니다 ....... 아이디어의 본질 : MACD가 있고 +와 -에서 특정 수준을 설정합니다. MACD가 이 수준(+ 및 - 모두) 뒤에 있으면 매수 및 매도 화살표가 나타납니다. 그것은 한 것 같습니다, 그것은 오류없이 컴파일하지만 그러나 그것은 어떻게 든 잘못 작동합니다. 음, 그렇지 않습니다 ....

 //+------------------------------------------------------------------+
//|                                               Indicator_MACD.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
// Modify Vinin
#property copyright ""
#property link       ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- input parameters
extern int        Fast_EMA= 8 ;
extern int        Slow_EMA= 34 ;
extern double     N = 0.0015 ;
extern int        A = 10 ;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double MACD[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers( 3 );
   SetIndexStyle( 0 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 0 , 218 );
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexStyle( 1 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 1 , 217 );
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
   SetIndexEmptyValue( 1 , 0.0 );
   SetIndexBuffer ( 2 ,MACD);
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int     counted_bars=IndicatorCounted();
   int limit = Bars -counted_bars- 1 ;
   
   for ( int i = limit; i>= 0 ; i--) {
      ExtMapBuffer2[i] = EMPTY;
      ExtMapBuffer1[i] = EMPTY;
      MACD[i]= iMACD ( NULL , 0 ,Fast_EMA,Slow_EMA, 1 , 1 ,MODE_MAIN, i);
       if ((MACD[i]>MACD[i+ 1 ]) || (MACD[i]<MACD[i+ 1 ]))
      {
       if ( MACD[i] <-N) ExtMapBuffer2[i] = Low[i]-A* Point ;
       if ( MACD[i] > N) ExtMapBuffer1[i] = High[i]+A* Point ; 
      }
   }
   return ( 0 );
}
//+------------------------------------------------------------------+ 

이것은 작동 지표입니다

 

와 이렇게 됐어.......

 //+------------------------------------------------------------------+
//|                                           ndicator_MACD_OsMA.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
// Modify Vinin
#property copyright ""
#property link       ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- input parameters
extern int        F_EMA= 8 ;       // пар-ры MACD
extern int        S_EMA= 34 ;     // пар-ры MACD
extern double     N = 0.0015 ;   // контр. линия
extern int        A = 10 ;       // расстояние от бара
extern int        Fast_EMA= 12 ;   // пар-ры OsMA
extern int        Slow_EMA= 26 ;   // пар-ры OsMA
extern int        Signal_EMA= 9 ; // пар-ры OsMA
extern double     Z = 0.00005 ;   // контр. линия
extern int        B = 10 ;       // расстояние от бара

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double MACD[];
double OsMA[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers( 3 );
   SetIndexStyle( 0 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 0 , 218 );
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexStyle( 1 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 1 , 217 );
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
   SetIndexEmptyValue( 1 , 0.0 );
   SetIndexBuffer ( 2 ,MACD);
   SetIndexBuffer ( 2 ,OsMA);
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int     counted_bars=IndicatorCounted();
   int limit = Bars -counted_bars- 1 ;
   
   for ( int i = limit; i>= 0 ; i--) {
      ExtMapBuffer2[i] = EMPTY;
      ExtMapBuffer1[i] = EMPTY;
      MACD[i]= iMACD ( NULL , 0 ,F_EMA,S_EMA, 1 , 1 ,MODE_MAIN, i);
      OsMA[i]= iOsMA ( NULL , 0 ,Fast_EMA,Slow_EMA,Signal_EMA, PRICE_OPEN ,i);
       if (((MACD[i]>MACD[i+ 1 ])||(MACD[i]<MACD[i+ 1 ]))&&((OsMA[i]>OsMA[i+ 1 ])||(OsMA[i]<OsMA[i+ 1 ])))
      {
       if ( MACD[i] <-N) ExtMapBuffer2[i] = Low[i]-A* Point ;
       if ( MACD[i] > N) ExtMapBuffer1[i] = High[i]+A* Point ;
       if ( OsMA[i] <-Z) ExtMapBuffer2[i] = Low[i] -B* Point ;
       if ( OsMA[i] > Z) ExtMapBuffer1[i] = High[i]+B* Point ; 
      }
   }
   return ( 0 );
}
//+------------------------------------------------------------------+ 

코드에서 뭔가 잘못된 느낌이 들지만 이해가 되지 않습니다 .................................. 불행한 사람에게 TELL .. ... : -))

 
그리고 지수 아카이브에 가장 기본적인 쌍이 없는 이유는 무엇입니까? EUR/USD , USD/JPY? 내가 뭔가 잘못하고 있는 건 아닐까?
 

안녕하세요! KimIV 의 기능에 대해 Artyom에게 감사드립니다.

아마도 누군가는 알고 있을 것입니다: TakeProfitLastClosePos() 함수 중 하나 (마지막 마감 위치 의 TakeProfit 가격 또는 -1 반환), TakeProfit 소수점 4자리로 반환하고 DC는 소수점 5자리(EURUSD 쌍)를 제공합니다. 마지막으로 마감된 포지션의 TakeProfit다음 주문 배치 가격 의 값은 서로 직접적인 관련이 있기 때문에 다음 주문을 할 수 없습니다. 이 상황에서 벗어나도록 도와주세요? 미리 감사드립니다!!!

 double TakeProfitLastClosePos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   double    r=- 1 ;
   int       i, k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if (OrderSymbol()==sy || sy== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                r=OrderTakeProfit();
              }
            }
          }
        }
      }
    }
  }
   return (r);
}
 
dimon74 :

안녕하세요! KimIV 의 기능에 대해 Artyom에게 감사드립니다.

아마도 누군가는 알고 있을 것입니다: TakeProfitLastClosePos() 함수 중 하나 (마지막 마감 위치의 TakeProfit 가격 또는 -1 반환), TakeProfit 소수점 4자리로 반환하고 DC는 소수점 5자리(EURUSD 쌍)를 제공합니다. 마지막으로 마감된 포지션의 TakeProfit다음 주문 배치 가격 의 값은 서로 직접적인 관련이 있기 때문에 다음 주문을 할 수 없습니다. 이 상황에서 벗어나도록 도와주세요? 미리 감사드립니다!!!


일반적으로 함수는 소수점 이하 모든 유효 자릿수를 포함하는 값을 반환합니다. 소수점 이하 8자리 이상. 기본적으로 4자리 숫자만 표시됩니다. 그러나 DoubleToStr()을 미리 사용하면 다음을 확인할 수 있습니다.
 
drknn :
OrderSend(통화 쌍의 문자 이름.... 음, 기타 매개변수.......)


다중 통화 Expert Advisor의 코드를 이해하도록 도와주세요. 하나의 Expert Advisor가 작업하고 모든 쌍에서 거래를 열어야 합니다.

CodeBase에서 다중 통화 고문 을 찾았지만 무엇이 어디에, 왜 있는지 알 수 없습니다.

테스터에서 이러한 어드바이저를 확인할 수 없고 다중통화 코드에 대한 이해가 없기 때문에 ((일반적인 방식으로 설명하십시오. 이 코드 또는 다른 코드를 기반으로 무엇을 어디서, 왜, 왜 어드바이저가 거래 여기에서 사례를 이해하지 않고 코드를 직접 자르면 작업을 수행할 수 있지만 구현에 대해 결코 이해할 수 없으며 다시 법원에 도움을 요청해야 합니다.

extern string Instrument = "EURUSD" ;
extern double Lots = 0.1 ;
extern int    TakeProfit = 50 ;
extern int    TrailingStop = 0 ;
extern int    StopLoss = 50 ;
extern int    FirstOpenLevel = 5 ;
extern int    LastOpenLevel = 20 ;
extern int    Slope = 2 ;
extern int    CloseLevel = 20 ;
 

int start()
{
   double MacdCurrent, MacdPrevious, SignalCurrent, SignalPrevious;
   int    i, total, p1, p2, p3, p4, p5, p6, p7, p8, p9;
  
   MacdCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 0 );
   MacdPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 1 );
   SignalCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 0 );
   SignalPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 1 );
      
   p1= 0 ; p2= 0 ; p3= 0 ; p4= 0 ; p5= 0 ; p6= 0 ; p7= 0 ; p8= 0 ; p9= 0 ;
      
     OrderSelect ( 0 ,SELECT_BY_POS,MODE_TRADES);
     
     if (OrderSymbol()== "EURUSD" ) {p1= 1 ;}
     if (OrderSymbol()== "GBPUSD" ) {p2= 1 ;}
     if (OrderSymbol()== "USDCHF" ) {p3= 1 ;}
     if (OrderSymbol()== "USDJPY" ) {p4= 1 ;}
     if (OrderSymbol()== "EURCHF" ) {p5= 1 ;}
     if (OrderSymbol()== "EURGBP" ) {p6= 1 ;}
     if (OrderSymbol()== "AUDUSD" ) {p7= 1 ;}
     if (OrderSymbol()== "USDCAD" ) {p8= 1 ;}
     if (OrderSymbol()== "EURJPY" ) {p9= 1 ;}
      
     OrderSelect ( 1 ,SELECT_BY_POS,MODE_TRADES);
     
     if (OrderSymbol()== "EURUSD" ) {p1= 1 ;}
     if (OrderSymbol()== "GBPUSD" ) {p2= 1 ;}
     if (OrderSymbol()== "USDCHF" ) {p3= 1 ;}
     if (OrderSymbol()== "USDJPY" ) {p4= 1 ;}
     if (OrderSymbol()== "EURCHF" ) {p5= 1 ;}
     if (OrderSymbol()== "EURGBP" ) {p6= 1 ;}
     if (OrderSymbol()== "AUDUSD" ) {p7= 1 ;}
     if (OrderSymbol()== "USDCAD" ) {p8= 1 ;}
     if (OrderSymbol()== "EURJPY" ) {p9= 1 ;}
     
     OrderSelect ( 2 ,SELECT_BY_POS,MODE_TRADES);
     
     if (OrderSymbol()== "EURUSD" ) {p1= 1 ;}
     if (OrderSymbol()== "GBPUSD" ) {p2= 1 ;}
     if (OrderSymbol()== "USDCHF" ) {p3= 1 ;}
     if (OrderSymbol()== "USDJPY" ) {p4= 1 ;}
     if (OrderSymbol()== "EURCHF" ) {p5= 1 ;}
     if (OrderSymbol()== "EURGBP" ) {p6= 1 ;}
     if (OrderSymbol()== "AUDUSD" ) {p7= 1 ;}
     if (OrderSymbol()== "USDCAD" ) {p8= 1 ;}
     if (OrderSymbol()== "EURJPY" ) {p9= 1 ;}
     
     OrderSelect ( 3 ,SELECT_BY_POS,MODE_TRADES);
     
     if (OrderSymbol()== "EURUSD" ) {p1= 1 ;}
     if (OrderSymbol()== "GBPUSD" ) {p2= 1 ;}
     if (OrderSymbol()== "USDCHF" ) {p3= 1 ;}
     if (OrderSymbol()== "USDJPY" ) {p4= 1 ;}
     if (OrderSymbol()== "EURCHF" ) {p5= 1 ;}
     if (OrderSymbol()== "EURGBP" ) {p6= 1 ;}
     if (OrderSymbol()== "AUDUSD" ) {p7= 1 ;}
     if (OrderSymbol()== "USDCAD" ) {p8= 1 ;}
     if (OrderSymbol()== "EURJPY" ) {p9= 1 ;}
     
     OrderSelect ( 4 ,SELECT_BY_POS,MODE_TRADES);
     
     if (OrderSymbol()== "EURUSD" ) {p1= 1 ;}
     if (OrderSymbol()== "GBPUSD" ) {p2= 1 ;}
     if (OrderSymbol()== "USDCHF" ) {p3= 1 ;}
     if (OrderSymbol()== "USDJPY" ) {p4= 1 ;}
     if (OrderSymbol()== "EURCHF" ) {p5= 1 ;}
     if (OrderSymbol()== "EURGBP" ) {p6= 1 ;}
     if (OrderSymbol()== "AUDUSD" ) {p7= 1 ;}
     if (OrderSymbol()== "USDCAD" ) {p8= 1 ;}
     if (OrderSymbol()== "EURJPY" ) {p9= 1 ;}
   
   total= OrdersTotal ();
   for (i= 0 ;i<total;i++)
   {
     OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
        
     if (OrderSymbol()==Instrument)
      {
         if (OrderType()==OP_BUY) 
          {
            if (MacdPrevious-SignalPrevious-MacdCurrent+SignalCurrent>CloseLevel* 0.1 * Point )
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid, 3 , Violet );
                 return ( 0 );
                }
            if (TrailingStop> 0 )  
              {      
               if (Bid-OrderOpenPrice()> Point *TrailingStop)
                 {
                  if (OrderStopLoss()<Bid- Point *TrailingStop || OrderStopLoss()== 0 )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Point *TrailingStop,OrderTakeProfit(), 0 , Green );
                     return ( 0 );
                    }
                 }
              }
           }
          if (OrderType()==OP_SELL)
           {
            if (SignalPrevious-MacdPrevious-SignalCurrent+MacdCurrent>CloseLevel* 0.1 * Point )
              {
               OrderClose(OrderTicket(),OrderLots(),Ask, 3 , Violet );
               return ( 0 );
              }
            if (TrailingStop> 0 )  
              {         
               if (OrderOpenPrice()-Ask> Point *TrailingStop)
                 {
                  if (OrderStopLoss()>Ask+ Point *TrailingStop || OrderStopLoss()== 0 )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Point *TrailingStop,OrderTakeProfit(), 0 , Red );
                     return ( 0 );
                    }
                 }
              }
           }
        }
     }
   
   total= OrdersTotal ();  
   if (total< 5 )
   {
     if ((Instrument== "EURUSD" && p1< 1 ) || (Instrument== "GBPUSD" && p2< 1 ) || 
        (Instrument== "USDCHF" && p3< 1 ) || (Instrument== "USDJPY" && p4< 1 ) ||
        (Instrument== "EURCHF" && p5< 1 ) || (Instrument== "EURGBP" && p6< 1 ) ||
        (Instrument== "AUDUSD" && p7< 1 ) || (Instrument== "USDCAD" && p8< 1 ) ||
        (Instrument== "EURJPY" && p9< 1 )) 
      {
        if (MacdCurrent< 0 && MacdCurrent-SignalCurrent>SignalCurrent*FirstOpenLevel*(- 0.01 )
           && MacdCurrent-SignalCurrent<SignalCurrent*LastOpenLevel*(- 0.01 )
           && MacdCurrent-MacdPrevious>MacdPrevious*Slope*(- 0.01 )
           && MacdPrevious-SignalPrevious-MacdCurrent+SignalCurrent<(CloseLevel- 10 )* 0.1 * Point )  
          {
           OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Ask-StopLoss* Point ,Ask+TakeProfit* Point , "" , 0 , 0 , Green );
           return ( 0 ); 
          }   
      
         if (MacdCurrent> 0 && SignalCurrent-MacdCurrent>SignalCurrent*FirstOpenLevel* 0.01
            && SignalCurrent-MacdCurrent<SignalCurrent*LastOpenLevel* 0.01
            && MacdPrevious-MacdCurrent>MacdPrevious*Slope* 0.01
            && SignalPrevious-MacdPrevious-SignalCurrent+MacdCurrent<(CloseLevel- 10 )* 0.1 * Point )
          {
           OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Bid+StopLoss* Point ,Bid-TakeProfit* Point , "" , 0 , 0 , Red );
           return ( 0 ); 
          }
       }
    }
}
 
igrok2008 :

와 이렇게 됐어.......
코드에서 뭔가 잘못된 느낌이 들지만 이해가 되지 않습니다 .......

네 번째 표시기 배열을 추가했으며 아직 3개가 있는 코드에서 수정된 코드는 아래와 같습니다.
 int init(){
//---- indicators
   IndicatorBuffers( 4 );   
   SetIndexStyle( 0 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 0 , 218 );
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   SetIndexEmptyValue( 0 , 0.0 );   
   SetIndexStyle( 1 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 1 , 217 );
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
   SetIndexEmptyValue( 1 , 0.0 );   
   SetIndexBuffer ( 2 ,MACD);
   SetIndexBuffer ( 3 ,OsMA);   
//----
}
 
Infinity :
다중 통화 Expert Advisor의 코드를 이해하도록 도와주세요. 하나의 Expert Advisor가 작업하고 모든 쌍에서 거래를 열어야 합니다.

CodeBase에서 다중 통화 Expert Advisor를 찾았지만 무엇이 어디에 있고 왜 그런지 알 수 없습니다.
테스터에서 이러한 어드바이저를 확인할 수 없고 다중통화 코드에 대한 이해가 없기 때문에 ((일반적인 방식으로 설명하십시오. 이 코드 또는 다른 코드를 기반으로 무엇을 어디서, 왜, 왜 어드바이저가 거래 여기에서 사례를 이해하지 않고 코드를 직접 자르면 작업을 수행할 수 있지만 구현에 대해 결코 이해할 수 없으며 다시 법원에 도움을 요청해야 합니다.

이 코드는 연결된 쌍에 대해서만 거래를 시작하기 때문에 적합하지 않습니다. 이는 다음 행에서 볼 수 있습니다.

 OrderSend ( Symbol () ,OP_BUY,Lots,Ask, 3 ,Ask-StopLoss* Point ,Ask+TakeProfit* Point , "" , 0 , 0 , Green );
OrderSend ( Symbol () ,OP_SELL,Lots,Bid, 3 ,Bid+StopLoss* Point ,Bid-TakeProfit* Point , "" , 0 , 0 , Red );

Symbol () 함수는 현재 쌍을 반환합니다. 따라서 이 기능 대신 다른 통화 쌍을 열려면 원하는 금융 상품 이름을 입력하기만 하면 됩니다.

 
ToLik_SRGV :

이 코드는 연결된 쌍에 대해서만 거래를 시작하기 때문에 적합하지 않습니다. 이는 다음 행에서 볼 수 있습니다.

Symbol () 함수는 현재 쌍을 반환합니다. 따라서 이 기능 대신 다른 통화 쌍을 열려면 원하는 금융 상품 이름을 입력하기만 하면 됩니다.


쉽지 않다. 또한 Point 를 원하는 값으로 변경하고 Ask를 수행해야 합니다. 예 입찰도.
 
ToLik_SRGV :

이 코드는 연결된 쌍에 대해서만 거래를 시작하기 때문에 적합하지 않습니다. 이는 다음 행에서 볼 수 있습니다.

Symbol () 함수는 현재 쌍을 반환합니다. 따라서 이 기능 대신 다른 통화 쌍을 열려면 원하는 금융 상품 이름을 입력하기만 하면 됩니다.


그게 바로 요점입니다... 제 고문은 설계상 다른 통화 쌍에서 신호를 수신합니다. 신호와 함께 신호를 수신한 통화의 이름이 나옵니다. 순서에서 Symbol() 함수의 위치는 다음과 같습니다 . 통화 쌍의 명목 가치가 할당된 변수. 즉, 신호가 유로에서 온 경우 EURUSD가 할당되고, ene에서 온 경우 USDJPY가 지정되지만 전문가를 포함하여 그는 모든 신호를 볼 수 있지만 자신이 서 있는 통화에 대해서만 엽니다.

내가하고있는 예제 코드는 다음과 같습니다.

 //---- ранее на обработке переменная Symb получает значение валютной пары с которой пришол сигнал
// далее я сравниваю и пытаюсь открыть ордер
 if (Symb == "GBPUSD" ) {val = "GBPUSD" ; ticket= OrderSend (val,OP_BUY, 0.1 ,Ask, 3 ,Bid- 20 * Point ,Ask+ 25 * Point , "" , 16384 , 0 , Green );}
 if (Symb == "EURUSD" ) {val = "EURUSD" ; ticket= OrderSend (val,OP_BUY, 0.1 ,Ask, 3 ,Bid- 20 * Point ,Ask+ 25 * Point , "" , 16384 , 0 , Green );}
 if (Symb == "USDJPY" ) {val = "USDJPY" ; ticket= OrderSend (val,OP_BUY, 0.1 ,Ask, 3 ,Bid- 20 * Point ,Ask+ 25 * Point , "" , 16384 , 0 , Green );}
사유: