Çoklu para birimi danışmanı hakkında soru - sayfa 13

 

Günaydın!

Lütfen. söylemek. Çok para birimli bir Uzman Danışmanda her bir çift için pozisyonlar bu şekilde açılır.-

 //ЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ
//-------------------------Изначальная позиция ----------
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 ) ;
   } } 
//ЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ

Söylemek. Bu blok yerine nasıl ayrı bir fonksiyon yazabilirim.

Her çift için bu bloğu yeniden yazmamak için ?

(Blokta, I. Kim'in işlevleri ve açılış işlevleri, Piyasa İzleme ticaret emirlerinin piyasa yürütme koşullarında kullanılmıştır).

 
Rita писал(а) >>

Günaydın!

Lütfen. söylemek. Çok para birimli bir Uzman Danışmanda her bir çift için pozisyonlar bu şekilde açılır.-

Söylemek. Bu blok yerine nasıl ayrı bir fonksiyon yazabilirim.

Her çift için bu bloğu yeniden yazmamak için ?

(Blokta, I. Kim'in işlevleri ve açılış işlevleri, Piyasa İzleme ticaret emirlerinin piyasa yürütme koşullarında kullanılmıştır).

void FUN(string _Symbol){

// Kodunuz, ancak belirli bir araç yerine _Symbol kullanılıyor

}

 

Teşekkür ederim. Peki ya her çift için teklifler, sorular, Delta, Lot ve bool TRADE (bu giriş iznidir)?

Bu böyle mi doğru olurdu? -

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

Ayrıca. Kulağımın köşesinden, kullanıcı tanımlı bir işlevi diğerinin içinde kullanmanın (çağırmanın) yanlış olduğunu duydum.

Ve piyasa emirlerinin piyasa yürütme koşullarında pozisyon açmak için f-i bloğunda kullanıyorum Piyasa İzleme

 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 ) ; }
İşyerinde sorunlar ve başarısızlıklar olacak mı?
 
Rita писал(а) >>

Teşekkür ederim. Peki ya her çift için teklifler, sorular, Delta, Lot ve bool TRADE (bu giriş iznidir)?

Bu böyle mi doğru olurdu? -

Ayrıca. Kulağımın köşesinden, kullanıcı tanımlı bir işlevi diğerinin içinde kullanmanın (çağırmanın) yanlış olduğunu duydum.

Ve piyasa emirlerinin piyasa yürütme koşullarında pozisyon açmak için f-i bloğunda kullanıyorum Piyasa İzleme

İşyerinde sorunlar ve başarısızlıklar olacak mı?

double _Bid=MarketInfo(_Symbol, MODE_BID);

double _Ask=MarketInfo(_Symbol, MODE_ASK);

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

İşlev çağrısı herhangi bir yerde olabilir. hiçbir sorun olmayacak

 
TAMAM. Sayesinde.
 

Tünaydın!

Çok para biriminde takip kullanıyorum. Işte bir tane:

 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 ) ;
        } } } 
//---------------------------------------------  
 }   }  }

İzi tüm çoklu para birimi çiftleri için kullanmak için bu şekilde yeniden oluşturdum.

(Teklif sorma noktaları MarketInfo (Symbol_1,MODE_ASK) aracılığıyla çağrılır;

 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 açılış fiyatları üzerinde çalışıyor.

Trol şöyle adlandırılır:

 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 ) ; }

Yine de. Bu dahil edilen trol çalışmıyor.

Bir karakterin trolünü tamamen kaldırırsam diğer çiftin trolü çalışmaya başlar.

Ve kodda her iki takip çağrısı da mevcutsa, hiçbiri çalışmaz.

Lütfen. söylemek. Nerede hata olabilir?

 

Her enstrüman ve zaman dilimi için kendi geçmiş zamanınızı kullanmanız gerekir.

 

Teşekkürler Vinin !

ve her çift için kendi trolümü yazmaya çoktan hazırdım ....

 

Çoklu para birimi ile yardım.

Danışman tarafından yazılmıştır . İki EURUSD <-> GBPUSD çifti için aynı anda emir açar/kapatır. EURUSD'ye tutunuyorum. Her iki çiftin tırnaklarını okur (iOpen). Aşağıdaki komutlar yürütülür

Ask_EUR = MarketInfo("EURUSD", MODE_ASK);

Bid_EUR = MarketInfo("EURUSD", MODE_BID);

Ancak bu komutlar yürütülmez.

Ask_GBP = MarketInfo("GBPUSD", MODE_ASK);

Bid_GBP = MarketInfo("GBPUSD", MODE_BID);

Değerler ask = teklif = 0

Söyle bana, sorun ne?

 
MARKET WATCH penceresinde ikinci bir çift var mı?