Und machen wir einen "Cartoon" daraus (Mehrwährung)

 

Ich würde wirklich gerne mehrere Paare gleichzeitig testen...

Ich kann es nicht selbst tun... Wenn Sie mir helfen können, eine Multicurrency EA machen) Ich werde das Wesen der Arbeit mit mehreren Paaren zu verstehen...

Ich habe es selbst geschrieben, für fünf Ziffern... ...und nahm etwas aus dem Forum mit...)

Beschreibung hier)

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

Ich würde wirklich gerne mehrere Paare gleichzeitig testen...

Ich kann es nicht selbst tun... Aber ich wäre Ihnen dankbar, wenn Sie mir helfen könnten, einen EA mit mehreren Währungen zu erstellen)

Ich habe es selbst geschrieben... Ich habe es selbst geschrieben ... und das, was ich brauchte, aus dem Forum genommen ...)

Also vielleicht einfach ein paar Paare damit ausstatten.

 
Vinin >> :

Also vielleicht einfach mehrere Paare anziehen.

Das wird nicht funktionieren, weil ich für ein Paar geschrieben habe... Signale werden vom aktuellen Paar genommen, und die Arbeit mit Aufträgen wird nur für ein Paar organisiert(

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

Natürlich kann ich die Signale mit anderen Paaren verbinden... ...aber ich kann mit ihnen keine Aufträge verwalten... zumindest noch nicht)

 
ALex2008 писал(а) >>

Es wird nicht so funktionieren, weil ich für ein Paar geschrieben habe... Signale werden vom aktuellen Paar genommen, und die Arbeit mit Aufträgen wird nur für ein Paar organisiert(

Vielleicht hat jemand Lust, es neu zu machen. Ich bin faul.

 
Vinin >> :

Vielleicht hat jemand Lust, es neu zu machen. Ich bin zu faul.

Wir werden also warten. >> vielleicht kann jemand helfen.)

 
ALex2008 >> :

Ich würde wirklich gerne mehrere Paare gleichzeitig testen...

Ich kann es nicht selbst tun... aber ich würde es zu schätzen wissen, wenn Sie mir helfen könnten, einen EA mit mehreren Währungen zu erstellen)

Wenn Sie einen EA mit mehreren Währungen in einem Tester erstellen möchten , können Sie ihn prinzipiell nicht testen (er erzeugt Ticks nur für ein Paar, das getestet wird). Zu diesem Zweck sollte ein und derselbe EA seine eigenen Aufträge und die Aufträge anderer EAs unterscheiden, indem er dieselbe magische Zahl verwendet, die beispielsweise in seinen Parametern festgelegt ist ;)

 
ForexTools >> :

...Dazu muss derselbe Berater in der Lage sein, zwischen eigenen und fremden Aufträgen zu unterscheiden, indem er z.B. in seinen Parametern dieselbe Magie einsetzt ;)

Im Prinzip spielt es für mich keine Rolle, ob es sich um einen echten Multi handelt oder nur um die Unterscheidung der Aufträge anderer. Ich möchte mit mehreren Paaren handeln, nicht nur mit einem... Ich möchte es ein oder zwei Monate lang mit einer Demo ausprobieren... Ich bin einfach an den Ergebnissen interessiert...)

 
ForexTools >> :

...Um dies zu tun, muss derselbe EA zwischen seinen eigenen und fremden Aufträgen durch dieselbe Magie unterscheiden, die zum Beispiel in seinen Parametern festgelegt ist ;)...

...oder automatisch generiert ;))

 
granit77 >> :

...oder automatisch generiert ;))

Ich werde den Code mit dem Magie-Generator einfügen... aber was ist für mich drin... Ich muss den Algorithmus verstehen.)

 

Könnte helfen.

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

Und nebenbei bemerkt, Sie haben eine Menge Fehler in Ihrem Code!

iLow(PERIOD_H4,0,0) - was ist das?