Y hagamos una "caricatura" de ello (multidivisa)

 

Me gustaría probar varios pares al mismo tiempo...

No puedo hacerlo yo mismo... Si me pueden ayudar a hacer un EA multidivisa) entenderé la esencia de trabajar con varios pares...

Lo escribí yo mismo, por cinco dígitos... ...y tomó algo del foro...)

descripción aquí)

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

Me gustaría probar en varios pares al mismo tiempo...

No puedo hacerlo yo mismo... Pero te agradecería que me ayudaras a hacer un EA multidivisa)

Lo escribí yo mismo... Lo escribí yo mismo ... y tomé lo que necesitaba del foro ...)

Así que tal vez sólo ponerlo en unos pocos pares.

 
Vinin >> :

Así que tal vez sólo ponerlo en varios pares.

Esto no funcionará, porque escribí para un par... las señales se toman del par actual, y el trabajo con las órdenes se organiza para un solo par(

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

Por supuesto, puedo conectar las señales con otros pares... ...pero no puedo gestionar los pedidos con ellos... al menos no todavía)

 
ALex2008 писал(а) >>

No funcionará así, porque escribí para un par... las señales se toman del par actual, y el trabajo con las órdenes se organiza para un solo par(

Tal vez alguien quiera rehacerlo. Soy perezoso.

 
Vinin >> :

Tal vez alguien quiera rehacerlo. Soy demasiado vago.

Esperaremos, entonces. >> tal vez alguien pueda ayudar).

 
ALex2008 >> :

Me gustaría probar varios pares al mismo tiempo...

No puedo hacerlo yo mismo... pero te agradecería que me ayudaras a hacer un EA multidivisa)

Si quiere hacer un EA multidivisa en un probador, no puede probarlo en principio ( genera ticks sólo para un par bajo prueba). Para ello un mismo EA debe distinguir sus propias órdenes y las de otros EAs utilizando el mismo número mágico establecido por ejemplo en sus parámetros ;)

 
ForexTools >> :

...Para ello, el mismo asesor debe ser capaz de distinguir entre las órdenes propias y las ajenas mediante la misma magia establecida, por ejemplo, en sus parámetros ;)

En principio, no me importa si será un multi real o sólo distinguirá las órdenes de otros. Quiero operar en varios pares, no en uno... Quiero probarlo en una demo durante uno o dos meses... Sólo me interesa el resultado...)

 
ForexTools >> :

...Para ello el mismo Asesor Experto debería distinguir las órdenes propias y ajenas por la misma magia establecida por ejemplo en sus parámetros ;).

...o generado automáticamente;))

 
granit77 >> :

...o generado automáticamente;))

Pondré el código con el generador de magik... pero lo que hay para mí... Necesito entender el algoritmo).

 

Podría ayudar.

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

Y por cierto, ¡tienes muchos errores en tu código!

iLow(PERIOD_H4,0,0) - ¿Qué es esto?

Razón de la queja: