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

 

Puan. Aynı anda birkaç çift üzerinde test etmek istiyorum ...

Kendimi nasıl bilmiyorum... ama çok para birimli bir Uzman Danışman yapmama yardım edebilirseniz minnettar olurum) Aynı zamanda, birkaç çiftle çalışmanın özünü ben de anlayacağım...

Beş işaretinin altına kendim yazdım ... peki, forumdan bir şey aldım ..)

açıklama burada)

 //+------------------------------------------------------------------+
//|                                            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 писал(а) >>

Puan. Aynı anda birkaç çift üzerinde test etmek istiyorum ...

Kendimi nasıl bilmiyorum ... ama bir danışmandan çok para birimli bir danışman yapmama yardım ederseniz minnettar olurum)

Kendim yazdım ... Neyse, forumdan ihtiyacım olanı aldım ..)

Bu yüzden belki sadece birkaç çift giyin.

 
Vinin >> :

Bu yüzden belki sadece birkaç çift giyin.

Bu işe yaramayacak, çünkü bir çift için yazdı .. mevcut çiftten sinyal alır ve siparişlerle çalışmak yalnızca bir çift için düzenlenir (

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

Tabii ki, sinyalleri diğer çiftlerle bağlayabilirim... ama onları kullanarak siparişleri yönetemeyeceğim... en azından şimdilik)

 
ALex2008 писал(а) >>

Bu işe yaramayacak, çünkü bir çift için yazdı .. mevcut çiftten sinyal alır ve siparişlerle çalışmak yalnızca bir çift için düzenlenir (

Belki biri değiştirmek ister. Tembelim.

 
Vinin >> :

Belki biri değiştirmek ister. Tembelim.

O zaman bekleyelim.. Biri yardım edebilir mi?)

 
ALex2008 >> :

Puan. Aynı anda birkaç çift üzerinde test etmek istiyorum ...

Kendimi nasıl bilmiyorum ... ama bir danışmandan çok para birimli bir danışman yapmama yardım ederseniz minnettar olurum)

Prensip olarak, test cihazında çoklu para birimini test etmek imkansızdır ( yalnızca test edilen bir çift için keneler oluşturur ). bu nedenle, demoda yalnızca birkaç çizelge üzerinde test edebilirsiniz. Bunu yapmak için, bir ve aynı danışman, örneğin parametrelerinde, aynı sihir seti ile kendisinin ve diğer insanların emirleri arasında ayrım yapmalıdır;)

 
ForexTools >> :

...Bunu yapmak için, bir ve aynı danışman, kendisinin ve diğer insanların emirlerini, örneğin parametrelerinde, aynı sihir seti ile ayırt etmelidir;)

İş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ç)

 
ForexTools >> :

..Bunu yapmak için, bir ve aynı danışman, örneğin parametrelerinde, aynı sihir seti ile kendisinin ve diğer insanların emirleri arasında ayrım yapmalıdır;)..

..veya otomatik olarak oluşturulur ;))

 
granit77 >> :

..veya otomatik olarak oluşturulur ;))

Kodu sihirli jeneratörle ekleyeceğim ... sadece ondan bana .. Eylemlerin algoritmasını anlardım)

 

Belki yardımcı olur

 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 ( ) ] + + ;
   }
}
 

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

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

Neden: