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

 

pts. 동시에 여러 쌍을 테스트하고 싶습니다 ...

본인은 어떨지 모르겠지만...다중통화 전문가 고문을 만드는 데 도움을 주시면 감사하겠습니다) 동시에 여러 쌍으로 작업하는 것의 본질을 이해하게 될 것입니다 ...

나는 그것을 5 기호로 직접 썼습니다 ... 글쎄, 나는 포럼에서 무언가를 가져 왔습니다 ..)

여기에 설명)

 //+------------------------------------------------------------------+
//|                                            20090717_H4_Candy.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "LITE"
#property link      "http://www.metaquotes.net"

#include <stdlib.mqh>

extern double Profit = 2000 ;

double Price [ 2 ] ;
int    giSlippage ;

int iOrders , i ;
double b0 , b1 , s0 , s1 , StopLoss , Enter ;
bool dwn , up , mod ;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init ( )
  {
//----
   Profit * = Point ; 
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit ( )
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start ( )
  {
//----
   iOrders = OrdersTotal ( ) - 1 ; //количество отложенных ордеров
   
   if ( OrdersTotal ( ) = = 0 ) {
      mod = false ;
      SetOrders ( ) ; }
   
   if ( ( OrdersTotal ( ) > 0 ) & & ( AccountProfit ( ) ) & & ( ! mod ) ) SetStop ( ) ;
   
   if ( OrdersTotal ( ) > 0 ) {
      if ( up ) UpTrend ( ) ;
      if ( dwn ) DownTrend ( ) ; }

//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+

//-------Удаление всех ордеров
void CloseOpenOrdersAndCancelPending ( )
   {
    for ( i = iOrders ; i > = 0 ; i - - ) {
      if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ) {
        if ( ( OrderType ( ) < = OP_SELL ) & & GetMarketInfo ( ) ) {
          if ( ! OrderClose ( OrderTicket ( ) , OrderLots ( ) , Price [ 1 - OrderType ( ) ] , giSlippage ) ) Print ( OrderError ( ) ) ;
        }
        else if ( OrderType ( ) > OP_SELL ) {
          if ( ! OrderDelete ( OrderTicket ( ) ) ) Print ( OrderError ( ) ) ;
        }
      }
    }
  }

//-------Поиск входа для установки ордеров и удаление всех ордеров
bool UpTrend ( )
  {
     if ( ( iOpen ( NULL , PERIOD_H4 , 1 ) - iClose ( NULL , PERIOD_H4 , 1 ) < = 0 ) & &
        ( iOpen ( NULL , PERIOD_H4 , 2 ) - iClose ( NULL , PERIOD_H4 , 2 ) > 0 ) ) {
         up = false ;
         dwn = true ;
         //DeleteAllPendingOrders();
         CloseOpenOrdersAndCancelPending ( ) ;
         return ( true ) ; }
     else 
        return ( false ) ;
  }
bool DownTrend ( )
  {
     if ( ( iOpen ( NULL , PERIOD_H4 , 1 ) - iClose ( NULL , PERIOD_H4 , 1 ) > = 0 ) & &
        ( iOpen ( NULL , PERIOD_H4 , 2 ) - iClose ( NULL , PERIOD_H4 , 2 ) < 0 ) ) {
         up = true ;
         dwn = false ;
         //DeleteAllPendingOrders();
         CloseOpenOrdersAndCancelPending ( ) ;
         return ( true ) ; }
     else 
         return ( false ) ;
  }

//-------Установка ордеров  
void SetOrders()
   {
      if(UpTrend()){
         Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
         RefreshRates();
         OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Ask+Profit, 0, 0,0, Green);}
      
      if(DownTrend()){
         Enter=iLow(NULL,PERIOD_H4,1)-10*Point;
         RefreshRates();
         OrderSend(Symbol(), OP_SELLSTOP, 0.1, Enter, 0, 0, Bid-Profit, 0, 0,0, Green);}
   }
   
//-------Вычисление и утановка стопа
void SetStop()
   {
      RefreshRates();
      b0=iLow(NULL,PERIOD_H4,0)-10*Point;
      b1=iLow(NULL,PERIOD_H4,1)-10*Point;
      s0=iHigh(NULL,PERIOD_H4,0)+(Ask-Bid)+10*Point;
      s1=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;

      
      if ( OrderSelect ( 0 , SELECT_BY_POS ) ) {       
         if ( OrderType ( ) = = OP_BUY ) {
            if ( b0 < b1 ) StopLoss = b1 ;
            else StopLoss = b0 ;
            RefreshRates ( ) ;
            mod = OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
            if ( mod ) return ( true ) ; }
         else {
            if ( s0 < s1 ) StopLoss = s0 ;
            else StopLoss = s1 ;
            RefreshRates ( ) ;
            mod = OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
            if ( mod ) return ( true ) ;
         }
      } 
   }
 
//+------------------------------------------------------------------+
//| Function..: OrderError                                           |
//+------------------------------------------------------------------+
string OrderError ( ) {
  int iError = GetLastError ( ) ;
  return ( StringConcatenate ( "Order:" , OrderTicket ( ) , " GetLastError()=" , iError ) ) ;
}

//+------------------------------------------------------------------+
//| Function..: GetMarketInfo                                        |
//| Returns...: bool Success.                                        |
//+------------------------------------------------------------------+
bool GetMarketInfo ( ) {
  RefreshRates ( ) ;
  Price [ 0 ] = MarketInfo ( OrderSymbol ( ) , MODE_ASK ) ;
  Price [ 1 ] = MarketInfo ( OrderSymbol ( ) , MODE_BID ) ;
  double dPoint = MarketInfo ( OrderSymbol ( ) , MODE_POINT ) ;
  if ( dPoint = = 0 ) return ( false ) ;
  giSlippage = ( Price [ 0 ] - Price [ 1 ] ) / dPoint ;
  return ( Price [ 0 ] > 0.0 & & Price [ 1 ] > 0.0 ) ;
}



 
ALex2008 писал(а) >>

pts. 동시에 여러 쌍을 테스트하고 싶습니다 ...

본인은 어떨지 모르겠지만... 어드바이저에서 다중통화 어드바이저로 만들 수 있게 도와주시면 감사하겠습니다)

내가 직접 썼다 ... 글쎄, 나는 포럼에서 필요한 것을 가져 갔다 ..)

그래서 그냥 몇 켤레를 넣어.

 
Vinin >> :

그래서 그냥 몇 켤레를 넣어.

이것은 작동하지 않을 것입니다. 한 쌍에 대해 작성 .. 현재 쌍에서 신호를 가져오고 주문 작업은 한 쌍에 대해서만 구성됩니다(

 if ( OrdersTotal ( ) = = 0 ) . . .
if ( OrdersTotal ( ) > 0 ) . . .

물론, 다른 쌍과 신호를 연결할 수 있습니다... 하지만 나는 그들을 사용하여 주문을 관리할 수 없습니다... 적어도 지금은)

 
ALex2008 писал(а) >>

이것은 작동하지 않을 것입니다. 왜냐하면 한 쌍에 대해 작성 .. 현재 쌍에서 신호를 가져오고 주문 작업은 한 쌍에 대해서만 구성됩니다(

누군가가 그것을 바꾸고 싶어할 수도 있습니다. 내가 게으른.

 
Vinin >> :

누군가가 그것을 바꾸고 싶어할 수도 있습니다. 내가 게으른.

그럼 기다리자.. 누군가 도와줄 수 있니?)

 
ALex2008 >> :

pts. 동시에 여러 쌍을 테스트하고 싶습니다 ...

본인은 어떨지 모르겠지만... 어드바이저에서 다중통화 어드바이저로 만들 수 있게 도와주시면 감사하겠습니다)

원칙적 으로 테스터에서 다중 통화를 테스트하는 것은 불가능합니다 (테스트 된 한 쌍에 대해서만 틱을 생성합니다 ). 따라서 데모의 일부 차트에서만 테스트할 수 있습니다. 이렇게 하려면 한 명의 동일한 고문이 예를 들어 매개변수에서 동일한 마법 세트로 자신과 다른 사람의 명령을 구별해야 합니다.)

 
ForexTools >> :

...이 작업을 수행하려면 한 명의 동일한 고문이 예를 들어 매개변수에서 동일한 마법 세트로 자신과 다른 사람의 명령을 구별해야 합니다.)

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

 
ForexTools >> :

..이 작업을 수행하려면 한 명의 동일한 고문이 매개변수와 같은 동일한 마법 세트로 자신의 명령과 다른 사람의 명령을 구별해야 합니다.)..

..또는 자동으로 생성됨 ;))

 
granit77 >> :

..또는 자동으로 생성됨 ;))

나는 마술 생성기로 코드를 삽입 할 것입니다 ... 그에게서 나에게만 .. 나는 행동 알고리즘을 이해할 것입니다)

 

아마도 도움이 될 것입니다

 int Order_Count [ 6 ] ;
//===============================================================================
// Функция возвращаюшая количество ордеров определенного типа исхода из заданных ограничений
//===============================================================================
void Order_Count_Calculate ( string _Symbol , int Magic ) {
   ArrayInitialize ( Order_Count , 0 ) ;
   for ( int i = OrdersTotal ( ) - 1 ;   i > = 0 ;   i - - ) {
       if ( ! OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) )    continue ;
       if ( OrderSymbol ( ) ! = _Symbol )                        continue ;
       if ( OrderMagicNumber ( ) ! = Magic )                    continue ;
      Order_Count [ OrderType ( ) ] + + ;
   }
}
 

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

iLow (PERIOD_H4,0,0)를 이해하는 방법은 무엇입니까?