그리고 이것으로 "만화"를 만들자 (다중 통화) - 페이지 2

 

주어진 악기와 마법에 대한 총 주문 수 를 반환하도록 내 기능을 약간 변경할 수 있습니다.

 
ALex2008 писал(а) >>

그게 바로 제가 도움을 요청하는 이유입니다) 저에게는 원칙적으로 리얼멀티가 될지.. 아니면 그냥 남의 명령을 구분짓는건지.. 본질은 똑같습니다-작동하게끔 한 쌍이 아닌 여러 쌍) , 한 달 또는 몇 .. 결과는 흥미 롭습니다)

다중 통화 전문가 고문의 논리를 공식화할수록 상세할수록 더 좋고 도움이 필요하지 않을 수 있습니다.

일반적으로 작업에 대한 명확한 이해는 구현 성공의 90%입니다.

 
sergeev >> :

그런데 코드에 오류가 있습니다! 더미!

iLow(PERIOD_H4,0,0)은(는) 이해하는 방법입니다.

현재 양초의 저점))

그리고 진실...! 그렇다면 테스트에서 어떻게 작동합니까?

어떻게 된건지 이해가 안됨.. 이렇게 되야지 - iLow(NULL,PERIOD_H4,0)

 
xeon >> :

다중 통화 전문가 고문의 논리를 공식화할수록 상세할수록 더 좋고 도움이 필요하지 않을 수 있습니다.

일반적으로 작업에 대한 명확한 이해는 구현 성공의 90%입니다.

네, 모든 것이 논리대로입니다) 경험이 없을뿐입니다 .. 어떤 기준으로 주문을 추적해야한다는 것을 이해하지만 이런 것을 작성한 적이 없기 때문에 몇 가지 질문이있을 것 같습니다 ... 기능 및 구현에 대해)

 
ALex2008 писал(а) >>

네, 모든 것이 논리대로입니다) 경험이 없을뿐입니다 .. 어떤 기준으로 주문을 추적해야한다는 것을 이해하지만 이런 것을 작성한 적이 없기 때문에 몇 가지 질문이있을 것 같습니다 ... 기능 및 구현 정보)

이전 페이지의 기능을 참조하십시오.

 
Vinin >> :

이전 페이지의 기능을 참조하십시오.

감사합니다 코드에 넣어보도록 하겠습니다

쓰기 시작했다..

 #define MAGIC 7779

이것 대신에 -

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

이것을 쓰고 -

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

.. swears - 'Order_Count_Calculate' - 함수가 결과를 반환하지 않음

내가 올바르게 이해한다면 함수는 MAGIC을 사용하여 현재 Symbol() 기호의 모든 순서를 찾아야 합니다.
 
ALex2008 писал(а) >>

감사합니다 코드에 넣어보도록 하겠습니다

쓰기 시작했다..

이것은 확실히 필요하지 않습니다 . extern string _Symbol = Symbol();

변수를 정의할 수 있지만 init() 또는 start()에 값을 할당하는 것이 좋습니다.

 
그래서 첫 번째 기능을 우연히 발견했습니다 .. (의미는 이해했지만 올바르게 사용하는 방법을 알지 못할 것 같습니다 ...
 
ALex2008 писал(а) >>

네, 모든 것이 논리대로입니다) 경험이 없을뿐입니다 .. 어떤 기준으로 주문을 추적해야한다는 것을 이해하지만 이런 것을 작성한 적이 없기 때문에 몇 가지 질문이있을 것 같습니다 ... 기능 및 구현 정보)

에에.... 혹시 이해를 못하실까봐.......

작업은 "나는 그것이 날고 싶다"입니다. 이것은 로기가가 아닙니다. 날아간 곳 등.

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

작업의 간단한 예:

통화 쌍 EURUSD, GBPUSD, USDCHF, USDJPY와 동시 작업.

H1 기간.

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

통화 쌍을 선택하기 위한 조건

BUY 설정 조건

매도 설정 조건

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

간단한 구현 예:

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 ордера
}

글쎄, 등등.

나는 이것에 대해 이야기하고 있습니다. 논리를 자세히 생각하면 구현에 문제가 없습니다.

 
xeon >> :

... 나는 이것에 대해 이야기하고 있습니다. 논리를 자세히 생각하면 구현에 문제가 없을 것입니다.

나는 오늘 그것에 대해 생각할 것입니다 ... 머리가 아픈 것 같습니다)) 감사합니다.

일반적으로 여기에 오류가있는 초안이 있습니다 ... 수정하십시오!)

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