E vamos fazer um "desenho animado" (multicurrency)

 

Gostaria muito de testar alguns pares ao mesmo tempo...

Eu mesmo não posso fazer isso... Se você puder me ajudar a fazer uma EA com várias moedas) eu entenderei a essência do trabalho com vários pares...

Eu mesmo o escrevi, por cinco dígitos. ...e tirou algo do fórum...)

descrição aqui)

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

Eu realmente gostaria de testar em alguns pares ao mesmo tempo...

Eu mesmo não posso fazer isso... Mas eu ficaria grato se você pudesse me ajudar a fazer uma EA com várias moedas)

Eu mesmo o escrevi... Eu mesmo o escrevi ... e tirei o que precisava do fórum ...)

Portanto, talvez seja só colocá-lo em alguns pares.

 
Vinin >> :

Portanto, talvez seja só colocá-lo em vários pares.

Isto não vai funcionar, porque eu escrevi para um par... os sinais são tirados do par atual, e o trabalho com ordens é organizado para um par apenas(

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

Claro, posso conectar os sinais com outros pares. ...mas não posso administrar ordens com eles... pelo menos ainda não)

 
ALex2008 писал(а) >>

Não vai funcionar assim, porque eu escrevi para um par... os sinais são tirados do par atual, e o trabalho com ordens é organizado para um só par(

Talvez alguém gostaria de refazê-lo. >> Eu sou preguiçoso demais.

 
Vinin >> :

Talvez alguém gostaria de refazê-lo. Eu sou muito preguiçoso.

Vamos esperar, então. >> talvez alguém possa ajudar).

 
ALex2008 >> :

Eu realmente gostaria de testar em alguns pares ao mesmo tempo...

Eu mesmo não posso fazer isso... mas eu agradeceria se você pudesse me ajudar a fazer uma EA com várias moedas)

Se você quiser fazer uma EA com várias moedas em um testador, não poderá testá-lo em princípio (ele gera carrapatos apenas para um par em teste). Para este fim, uma e a mesma EA deve distinguir suas próprias ordens e ordens de outras EA usando o mesmo número mágico definido, por exemplo, em seus parâmetros ;)

 
ForexTools >> :

...Para isso, o mesmo conselheiro deve ser capaz de distinguir entre suas próprias ordens e as de outras pessoas pelo mesmo conjunto mágico, por exemplo, em seus parâmetros ;)

Em princípio, não importa para mim se será um verdadeiro multi ou apenas distinguir as ordens dos outros. Quero negociar em vários pares, não em um... Quero experimentar em uma demonstração por um mês ou dois... Só estou interessado no resultado...)

 
ForexTools >> :

... Para isso, a mesma EA deve distinguir entre suas próprias ordens e as de outras pessoas pelo mesmo conjunto mágico, por exemplo, em seus parâmetros ;)...

...ou geradas automaticamente;))

 
granit77 >> :

...ou gerado automaticamente;))

Vou colocar o código com o gerador magik... mas o que eu ganho com isso... Eu preciso entender o algoritmo).

 

Pode ajudar.

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

E, a propósito, você tem muitos erros em seu código!

iLow(PERÍODO_H4,0,0) - o que é isto?

Razão: