Ve bundan bir "çizgi film" yapalım (çok para birimi) - sayfa 2

 

Belirli bir enstrüman ve büyü için toplam sipariş sayısını döndürmek için işlevimi biraz değiştirmek mümkündür.

 
ALex2008 писал(а) >>

İşte tam da bu yüzden yardım istiyorum) Benim için prensipte gerçek bir multi mi olacağı önemli değil .. yoksa sadece başkalarının emirlerini ayırt etmek mi .. Özü aynı - üzerinde çalışmasını sağlamak birkaç çift, bir değil), bir ay veya birkaç .. sonuç sadece ilginç)

Çoklu para birimi Uzman Danışmanın mantığını formüle edin, ne kadar ayrıntılı olursa o kadar iyidir ve yardıma ihtiyacınız olmayabilir.

Kural olarak, görevin net bir şekilde anlaşılması, uygulanmasının başarısının% 90'ıdır.

 
sergeev >> :

Ve bu arada, kodunuzda hatalar var! yığın!

iLow(PERIOD_H4,0,0) nasıl anlaşılır?

Mevcut mumun düşük))

Ve gerçek...! O zaman testte nasıl çalışıyor?

Bana nasıl olduğunu anlamıyorum .. Böyle olmalı - iLow(NULL,PERIOD_H4,0)

 
xeon >> :

Çoklu para birimi Uzman Danışmanın mantığını formüle edin, ne kadar ayrıntılı olursa o kadar iyidir ve yardıma ihtiyacınız olmayabilir.

Kural olarak, görevin net bir şekilde anlaşılması, uygulanmasının başarısının% 90'ıdır.

Evet, mantıkla her şey yolunda) Sadece deneyim yok .. Siparişleri bir şekilde takip etmeniz gerektiğini anlıyorum, ancak daha önce hiç böyle bir şey yazmadığım için korkarım sadece bazı sorular olacak. ... fonksiyonlar ve bunların uygulanması hakkında)

 
ALex2008 писал(а) >>

Evet, mantıkla her şey yolunda) Sadece deneyim yok .. Siparişleri bir şekilde takip etmeniz gerektiğini anlıyorum, ancak daha önce hiç böyle bir şey yazmadığım için korkarım sadece bazı sorular olacak. ... fonksiyonlar ve bunların uygulanması hakkında)

Önceki sayfadaki fonksiyona bakın

 
Vinin >> :

Önceki sayfadaki fonksiyona bakın

Teşekkürler, koda koymaya çalışacağım

yazmaya başladı..

 #define MAGIC 7779

bunun yerine -

   if ( OrdersTotal ( ) = = 0 ) {
      mod = false ;
      SetOrders ( ) ; }

bunu yazmak -

   if ( Order_Count_Calculate ( Symbol ( ) , MAGIC ) = = 0 ) {
      mod = false ;
      SetOrders ( ) ; }

.. küfür - 'Order_Count_Calculate' - fonksiyon sonuç döndürmez

Doğru anlarsam, fonksiyon MAGIC ile mevcut Symbol() sembolünün tüm sıralarını bulmalıdır.
 
ALex2008 писал(а) >>

Teşekkürler, koda koymaya çalışacağım

yazmaya başladı..

Bu kesinlikle gerekli değildir extern string _Symbol = Symbol();

Değişken tanımlanabilir ve init () veya start () içinde bir değer atamak daha iyidir.

 
Bu yüzden ilk fonksiyona rastladım .. (anlamı anladım, ama görünüşe göre onu nasıl doğru kullanacağımı anlayamayacağım ...
 
ALex2008 писал(а) >>

Evet, mantıkla her şey yolunda) Sadece deneyim yok .. Siparişleri bir şekilde takip etmeniz gerektiğini anlıyorum, ancak daha önce hiç böyle bir şey yazmadığım için korkarım sadece bazı sorular olacak. ... fonksiyonlar ve bunların uygulanması hakkında)

Eeh .... Korkarım anlamıyorsun ......

Görev "Uçmasını istiyorum", bu bir logiga değil - uçtuğu yerde ne uçtu, vb.

--------------------------------------------------

Kısa bir görev örneği:

EURUSD, GBPUSD, USDCHF, USDJPY döviz çiftleriyle eşzamanlı çalışma.

H1 dönemi.

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

döviz çifti seçme koşulu

SATIN AL ayar koşulu

SAT ayarı koşulu

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

Kısa uygulama örneği:

int MAGIC = 322223 ;
string Sym [ ]= { "EURUSD" , "GBPUSD" , "USDCHF" , "USDJPY" } ;      //Внесем в массив валютные пары с которыми будем работать
int start ( ) {
   
   int s = SymbolSelect ( ) ;                    //Функция выбора валютной пары
   if ( SelectOrder ( Sym [ s ] , OP_BUY , MAGIC ) < 0 ) {    //Если нет установленного ордера по выбранному символу
      UpTrend ( Sym [ s ] ) ;                        //Проверим условие установки ордера 
   }
   if ( SelectOrder ( Sym [ s ] , OP_SELL , MAGIC ) < 0 ) {    //Если нет установленного ордера по выбранному символу
      DownTrend ( Sym [ s ] ) ;                      //Проверим условие установки ордера 
   }

}


int SymbolSelect ( ) {
   int s = - 1 ;
   //Условие выбора валютной пары для работы  
   
   return ( s )
}
     //+-------------------Выбор ордера---------------------------+
int SelectOrder ( string Sym , int Tip , int MAGIC ) {
     int TotOrd = OrdersTotal ( ) ;
     int OrdTick = - 1 ;
     for ( int OrdPos = TotOrd - 1 ; OrdPos > = 0 ; OrdPos - - ) {
         if ( OrderSelect ( OrdPos , SELECT_BY_POS , MODE_TRADES ) = = true ) {
           if ( OrderSymbol ( ) = = Sym ) {                                            //Есть ли ордера с нужным символом
               if ( OrderType ( ) = = Tip ) {                                            //Если нужный тип ордера  
                 if ( MAGIC = = 0 ) { MAGIC = OrderMagicNumber ( ) ; }                      //Если магик = 0,неучитывать
                 if ( OrderMagicNumber ( ) = = MAGIC ) {                              //Есть ли ордера с нужным Магик номером
                    OrdTick = OrderTicket ( ) ; break ;                            //Запишем в переменную его тикет и прервем цикл 
     } } } } }
     return ( OrdTick ) ;                                                          //Возвращает тикет найденного ордера или -1
}
bool UpTrend ( string Sym ) {
     //Условие установки BUY ордера
}
bool DownTrend ( string Sym ) {
     //Условие установки SELL ордера
}

peki, vb.

Bundan bahsediyorum, mantığı ayrıntılı olarak düşünürseniz, uygulamada sorun yaşamayacaksınız.

 
xeon >> :

... Bundan bahsediyorum, mantığı detaylıca düşünürseniz uygulamada sorun yaşamazsınız.

Bugün düşüneceğim ... Kendime bir baş ağrısı bulduğumu hissediyorum)) Teşekkürler.

Genel olarak, burada hatalı bir taslak var ... lütfen düzeltin!)

extern double Profit = 3000 ;

int MAGIC = 322223 ;

string Sym [ ] = { "EURUSD" , "GBPUSD" , "USDCHF" , "USDJPY" } ;    //Внесем в массив валютные пары с которыми будем работать

double b0 , b1 , s0 , s1 , StopLoss , Enter ;
bool dwnSym , upSym , mod ;

int init ( ) { Profit * = Point ;
}

int start ( )
{
   
      int s = SymbolSelect ( ) ;                      //Функция выбора валютной пары
      if ( SelectOrder ( Sym [ s ] , OP_BUYSTOP , MAGIC ) < 0 ) {  //Если нет установленного ордера по выбранному символу
         UpTrend ( Sym [ s ] ) ;                          //Проверим условие установки ордера 
         }
      if ( SelectOrder ( Sym [ s ] , OP_SELLSTOP , MAGIC ) < 0 ) { //Если нет установленного ордера по выбранному символу
         DownTrend ( Sym [ s ] ) ;                        //Проверим условие установки ордера 
         }
      
      
      if ( SelectOrder ( Sym [ s ] , OP_BUYSTOP , MAGIC ) > 0 & & AccountProfit ( ) & & ( ! mod ) ) {  //Если установлен ордер по выбранному символу
         SetStopBuy ( Sym [ s ] ) ;                                                  //и он открылся, ставим стоп
         }
      if ( SelectOrder ( Sym [ s ] , OP_SELLSTOP , MAGIC ) > 0 & & AccountProfit ( ) & & ( ! mod ) ) { //Если установлен ордер по выбранному символу
         SetStopSell ( Sym [ s ] ) ;                                                 //и он открылся, ставим стоп
         }
}

   int SymbolSelect ( ) {
   int s = - 1 ;
   return ( s ) ; }
   
//+-------------------Выбор ордера---------------------------+
   int SelectOrder ( string Sym , int Tip , int MAGIC ) {
      int TotOrd = OrdersTotal ( ) ;
      int OrdTick = - 1 ;
      for ( int OrdPos = TotOrd - 1 ; OrdPos > = 0 ; OrdPos - - ) {
         if ( OrderSelect ( OrdPos , SELECT_BY_POS , MODE_TRADES ) = = true ) {
            if ( OrderSymbol ( ) = = Sym ) {                                           //Есть ли ордера с нужным символом
               if ( OrderType ( ) = = Tip ) {                                          //Если нужный тип ордера  
                  if ( MAGIC = = 0 ) { MAGIC = OrderMagicNumber ( ) ; }                     //Если магик = 0,неучитывать
                  if ( OrderMagicNumber ( ) = = MAGIC ) {                            //Есть ли ордера с нужным Магик номером
                     OrdTick = OrderTicket ( ) ; break ;                          //Запишем в переменную его тикет и прервем цикл 
      } } } } }
    return ( OrdTick ) ; }                                                         //Возвращает тикет найденного ордера или -1


//Условие и установка BUY ордера
   bool UpTrend ( string Sym ) {
       
       if ( ( iOpen ( Sym , PERIOD_H4 , 1 ) - iClose ( Sym , PERIOD_H4 , 1 ) < = 0 ) & &
         ( iOpen ( Sym , PERIOD_H4 , 2 ) - iClose ( Sym , PERIOD_H4 , 2 ) > 0 ) ) {
          upSym = false ;
          dwnSym = true ;
          CloseOpenOrdersAndCancelPending ( ) ;
          double Enter = iHigh ( Sym , PERIOD_H4 , 1 ) + ( Ask - Bid ) + 10 * Point ;
          OrderSend ( Sym , OP_BUYSTOP , 0.1 , Enter , 0 , 0 , Ask + Profit , 0 , 0 , 0 , Green ) ; }
   }

//Условие и установка SELL ордера
   bool DownTrend ( string Sym ) {
       
       if ( ( iOpen ( Sym , PERIOD_H4 , 1 ) - iClose ( Sym , PERIOD_H4 , 1 ) > = 0 ) & &
         ( iOpen ( Sym , PERIOD_H4 , 2 ) - iClose ( Sym , PERIOD_H4 , 2 ) < 0 ) ) {
          upSym = true ;
          dwnSym = false ;
          CloseOpenOrdersAndCancelPending ( ) ;
          double Enter = iLow ( Sym , PERIOD_H4 , 1 ) - 10 * Point ;
          OrderSend ( Sym , OP_SELLSTOP , 0.1 , Enter , 0 , 0 , Bid - Profit , 0 , 0 , 0 , Green ) ; }
         
   }
   
//-------Вычисление и утановка стопа для бай
void SetStopBuy ( string Sym )
   {
      RefreshRates ( ) ;
      double b0 = iLow ( Sym , PERIOD_H4 , 0 ) - 10 * Point ;
      double b1 = iLow ( Sym , PERIOD_H4 , 1 ) - 10 * Point ;
      
            if ( b0 < b1 ) StopLoss = b1 ;
            else StopLoss = b0 ;
            RefreshRates ( ) ;
            mod = OrderModify ( OrdTick , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
   } 
   
 //-------Вычисление и утановка стопа для сел
void SetStopSell ( string Sym )
   {
      RefreshRates ( ) ;
      double s0 = iHigh ( Sym , PERIOD_H4 , 0 ) + ( Ask - Bid ) + 10 * Point ;
      double s1 = iHigh ( Sym , PERIOD_H4 , 1 ) + ( Ask - Bid ) + 10 * Point ;
      
            if ( s0 < s1 ) StopLoss = s0 ;
            else StopLoss = s1 ;
            RefreshRates ( ) ;
            mod = OrderModify ( OrdTick , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
   }
   
void CloseOpenOrdersAndCancelPending ( )
   {
      for ( int i = OrdersTotal ( ) - 1 ; i > = 0 ; i - - ) {
      if ( ! OrderSelect ( i , SELECT_BY_POS ) )  continue ;
      if ( OrderSymbol ( ) ! = Sym )        continue ;
      OrderClose ( OrderTicket ( ) , OrderLots ( ) , OrderClosePrice ( ) , 10 ) ; }
   }