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

 

좋은 아침!

제발. 말하다. 이것은 다중 통화 Expert Advisor에서 각 쌍에 대한 위치가 열리는 방법입니다.-

 //ЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ
//-------------------------Изначальная позиция ----------
if ( Trade & & pb = = 0 & & ( iBarShift ( "EURCHF_FX" , timeFr , OpenTime1 ) ! = 0 ) 
//если нет открытых дл. позиций и не было на этом баре
   & & Bid_ < Lbid + Delta * Point_ ) {
if ( iMA ( "EURCHF_FX" , 0 , period_MA , 0 , MODE_SMMA , PRICE_MEDIAN , 0 ) < iClose ( "EURCHF_FX" , period_TF , 0 )
// || !Filter_DT)  { //если фильтр разрешает  
   SL = 0 ; TP = 0 ;
if ( StopLoss > 0 )   SL = Ask_ - Point_ * StopLoss ;
if ( TakeProfit > 0 ) TP = Ask_ + Point_ * TakeProfit ;   
ticket = WHCOrderSend ( "EURCHF_FX" , OP_BUY , Lots , Ask_ , 3 , SL , TP , "_001" , Magic , 0 , Blue ) ;
if ( ticket < 0 ) { Print ( "Ошибка открытия ордера BUY EURCHF_FX  #" , GetLastError ( ) ) ; 
               Sleep ( 10000 ) ;   return ( 0 ) ; }
 initorders ( ) ;               
OpenTime1 = iTime ( "EURCHF_FX" , timeFr , 0 ) ;
   } }
//жжжжжжжжж Дополнительная позиции жжжжжжжжжжжжжжжжж 
if ( NumberOfPositions ( "EURCHF_FX" , OP_BUY , Magic ) = = 1 & & 
NumberOfPositions ( "EURCHF_FX" , OP_BUY , Magic_2 ) < 1 ) {
//если открыта начальная позици
 if ( GetProfitOpenPosInPoint ( "EURCHF_FX" , OP_BUY , Magic ) < = LEVEL_1
  & & iBarShift ( "EURCHF_FX" , timeFr , OpenTime1 ) ! = 0 ) {
//и если убыток начальн. позиции больше заданного значения
 SL = 0 ; TP = 0 ;
if ( StopLoss > 0 )   SL = Ask_ - Point_ * StopLoss ;
if ( TakeProfit > 0 ) TP = Ask_ + Point_ * TakeProfit ;   
ticket = WHCOrderSend ( "EURCHF_FX" , OP_BUY , Lots + dL2 , Ask_ , 50 , SL , TP , "002" , Magic_2 , 0 , Blue ) ;
if ( ticket < 0 ) { Print ( "Ошибка открытия ордера BUY EURCHF_FX #" , GetLastError ( ) ) ; 
               Sleep ( 10000 ) ;   return ( 0 ) ; }
            
OpenTime1 = iTime ( "EURCHF_FX" , timeFr , 0 ) ;
   } } 
//ЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ

말하다. 이 블록 대신에 어떻게 별도의 함수를 작성할 수 있습니까?

각 쌍에 대해 이 블록을 다시 쓰지 않으려면 ?

(블록에서는 Market Watch 거래 주문의 시장 체결 조건에서 I. Kim의 기능과 개시 기능을 사용했습니다.)

 
Rita писал(а) >>

좋은 아침!

제발. 말하다. 이것은 다중 통화 Expert Advisor에서 각 쌍에 대한 위치가 열리는 방법입니다.-

말하다. 이 블록 대신에 어떻게 별도의 함수를 작성할 수 있습니까?

각 쌍에 대해 이 블록을 다시 쓰지 않으려면 ?

(블록에서는 Market Watch 거래 주문의 시장 체결 조건에서 I. Kim의 기능과 개시 기능을 사용했습니다.)

무효 FUN(문자열 _Symbol){

// 귀하의 코드이지만 특정 도구 대신 _Symbol이 사용됩니다.

}

 

고맙습니다. 그러나 각 쌍에 대한 입찰, 매도, Delta, Lot 및 bool TRADE(이것은 진입 허가임)는 어떻습니까?

이렇게 되는 것이 맞을까요? -

 void FUN ( string _Symbol , bool TRADE , double _BID , double _AZK ,
         double _Delta ,  double _LOTS ) {

게다가. 귓가에 한 가지 사용자 정의 함수를 다른 안에 있는 사용자 정의 함수를 사용(호출)하는 것이 옳지 않다는 말을 들은 것 같습니다.

그리고 나는 f-i 블록에서 시장 주문의 시장 실행 조건에서 포지션을 여는 데 사용합니다. Market Watch

 int WHCOrderSend ( string symbol ,   int cmd ,   double volume , 
                 double price , int slippage , double stoploss , 
                 double takeprofit , string comment , nt magic , 
                 datetime expiration ,   color arrow_color )
{  int ticket = OrderSend ( symbol , cmd , volume , price , slippage , 0 , 0 , comment ,
magic , expiration , arrow_color ) ;                              int check = - 1 ;
if ( ticket > 0 & & ( stoploss ! = 0                      | | takeprofit ! = 0 ) ) {
if ( ! OrderModify ( ticket , price , stoploss , takeprofit , expiration , arrow_color ) ) {
check = GetLastError ( ) ;                         if ( check ! = ERR_NO_ERROR ) {
Print ( "OrderModify error: " , ErrorDescription ( check ) ) ; }   }   }      else {
check = GetLastError ( ) ;                          if ( check ! = ERR_NO_ERROR ) {
Print ( "OrderSend error: " , ErrorDescription ( check ) ) ;   } }   return ( ticket ) ; }
직장에서 문제와 실패가 있습니까?
 
Rita писал(а) >>

고맙습니다. 그러나 각 쌍에 대한 입찰, 매도, Delta, Lot 및 bool TRADE(이것은 진입 허가임)는 어떻습니까?

이렇게 되는 것이 맞을까요? -

게다가. 귓가에 한 가지 사용자 정의 함수를 다른 안에 있는 사용자 정의 함수를 사용(호출)하는 것이 옳지 않다는 말을 들은 것 같습니다.

그리고 나는 f-i 블록에서 시장 주문의 시장 실행 조건에서 포지션을 여는 데 사용합니다. Market Watch

직장에서 문제와 실패가 있습니까?

이중 _Bid=시장 정보(_Symbol, MODE_BID);

이중 _Ask=시장 정보(_Symbol, MODE_ASK);

.................................................................. . .......................

함수 호출은 어디에서나 가능합니다. 문제가 없을 것입니다

 
확인. 덕분에.
 

안녕하세요!

다중 통화에서 후행을 사용합니다. 여기 하나가 있습니다:

 void TrailPositions ( ) // функция трейлинг стоп
{
  int Orders = OrdersTotal ( ) ;
  for ( int i = 0 ; i < Orders ; i + + ) {
    if ( ! ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ) ) continue ;
    if ( OrderSymbol ( ) ! = Symbol ( ) ) continue ;
     if ( OrderMagicNumber ( ) = = Magic ) { 
//--------------------------------------   
     if ( OrderType ( ) = = OP_BUY )  {
      if ( Bid - OrderOpenPrice ( ) > MinProfit * Point ) {
        if ( OrderStopLoss ( ) < Bid - ( TrailingStop + TrailingStep - 1 ) * Point ) {
          OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , Bid - TrailingStop * Point ,
                                                     OrderTakeProfit ( ) , 0 , Blue ) ;
        } } }
//-----------------------------------------
     if ( OrderType ( ) = = OP_SELL )  {
      if ( OrderOpenPrice ( ) - Ask > MinProfit * Point ) {
        if ( OrderStopLoss ( ) > Ask + ( TrailingStop + TrailingStep - 1 ) * Point 
                                                       | | OrderStopLoss ( ) = = 0 ) {
          OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , Ask + TrailingStop * Point ,
                                                      OrderTakeProfit ( ) , 0 , Blue ) ;
        } } } 
//---------------------------------------------  
 }   }  }

모든 다중 통화 쌍에 대한 추적을 사용하기 위해 이러한 방식으로 다시 만들었습니다.

(Bids-ask-points는 MarketInfo (Symbol_1,MODE_ASK)를 통해 호출됩니다.

 void TrailPositions ( string _Symbol ,
                    double _BID ,
                    double _AZK ,
                    double _Point ,
                    int MAGIC ,
                    int MinProfit ,
                    int TrailingStop ,
                    int TrailingStep ) 
{  int Orders = OrdersTotal ( ) ;  for ( int i = 0 ; i < Orders ; i + + ) {
    if ( ! ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ) ) continue ;
    if ( OrderSymbol ( ) ! = _Symbol ) continue ;
     if ( OrderMagicNumber ( ) = = MAGIC ) { 
//----------------------------------------------------   
     if ( OrderType ( ) = = OP_BUY )  {
      if ( _BID - OrderOpenPrice ( ) > MinProfit * _Point ) {
        if ( OrderStopLoss ( ) < _BID - ( TrailingStop + TrailingStep - 1 ) * _Point ) {
          OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , _BID - TrailingStop * _Point ,
                                                     OrderTakeProfit ( ) , 0 , Blue ) ;
        }      }    }
//-------------------------------------------------------
    if ( OrderType ( ) = = OP_SELL )  {
      if ( OrderOpenPrice ( ) - _AZK > MinProfit * _Point ) {
        if ( OrderStopLoss ( ) > _AZK + ( TrailingStop + TrailingStep - 1 ) * _Point 
                                                       | | OrderStopLoss ( ) = = 0 ) {
          OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , _AZK + TrailingStop * _Point ,
                                                      OrderTakeProfit ( ) , 0 , Blue ) ;
        }   }   } 
//--------------------------------------------------------------
   }   }  }

EA는 시가에 대해 작업합니다.

트롤은 다음과 같이 호출됩니다.

 if ( UseTrailing_1 ) { //выключатель трейлинг стопа 1 пары
if ( iTime ( Symbol_1 , TimeFR_1 , 0 ) = = prevtime ) return ( 0 ) ; //ждём появления нового бара
    prevtime = iTime ( Symbol_1 , TimeFR_1 , 0 ) ; //если появился новый бар , включаемся 
TrailPositions ( Symbol_1 , Bid1 , Ask1 , Point1 , Magic_1 , MinProfit_1 ,
                                      TrailingStop_1 , TrailingStep_1 ) ; }
//-------------------------------------------------------------------------------  
 
if ( UseTrailing_2 ) { //выключатель трейлинг стопа 2 пары
if ( iTime ( Symbol_2 , TimeFR_2 , 0 ) = = prevtime ) return ( 0 ) ; //ждём появления нового бара
    prevtime = iTime ( Symbol_2 , TimeFR_2 , 0 ) ; //если появился новый бар , включаемся 
TrailPositions ( Symbol_2 , Bid2 , Ask2 , Point2 , Magic_2 , MinProfit_2 ,
                                      TrailingStop_2 , TrailingStep_2 ) ; }

하지만. 이 포함의 트롤은 작동하지 않습니다.

한 캐릭터의 트롤을 완전히 제거하면 다른 한 쌍의 트롤이 작동하기 시작합니다.

그리고 두 추적 호출이 코드에 모두 있으면 작동하지 않습니다.

제발. 말하다. 어디에서 오류가 발생할 수 있습니까?

 

각 악기와 기간에 대해 고유한 이전 시간을 사용해야 합니다.

 

Vinin 감사합니다 !

그리고 나는 이미 각 쌍에 대해 나만의 트롤을 작성할 준비가 되어 있었습니다.

 

다중 통화에 대한 도움말.

고문이 작성했습니다 . 2개의 EURUSD <-> GBPUSD 쌍에 대한 주문을 동시에 열거나 닫습니다. 나는 EURUSD에 집착합니다. 두 쌍(iOpen)의 따옴표를 읽습니다. 아래 명령이 실행됩니다

Ask_EUR = MarketInfo("EURUSD", MODE_ASK);

Bid_EUR = MarketInfo("EURUSD", MODE_BID);

그러나 이러한 명령은 실행되지 않습니다.

Ask_GBP = MarketInfo("GBPUSD", MODE_ASK);

Bid_GBP = MarketInfo("GBPUSD", MODE_BID);

값 요청 = 입찰가 = 0

말해봐, 무슨 일이야?

 
MARKET WATCH 창에 두 번째 쌍이 있습니까?