并让我们把它做成一个 "卡通"(多货币)。

 

我真的想同时测试几对...

我不能自己做...如果你能帮我做一个多货币的EA),我就会明白用几个货币对工作的本质。

我自己写的,五位数......。...并从论坛上拿了一些东西...)

这里的描述)

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

我真的很想同时对几对进行测试......

我不能自己做...但如果你能帮我做一个多币种的EA,我将非常感激)

我自己写的...我自己写的......并从论坛上获取我需要的东西......)

因此,也许只是把它放在几双上。

 
Vinin >> :

因此,也许只是把它放在几对上。

这是不可能的,因为我是为一个配对而写的......信号是从当前配对中获取的,而订单的工作只为一个配对而组织的(

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

当然,我可以将信号与其他对接......但我不能用它们来管理订单...至少还没有)

 
ALex2008 писал(а)>>

它不会那样工作,因为我是为一个货币对写的......信号是从当前货币对中提取的,而且只为一个货币对组织订单工作(

也许有人愿意重拍它。>> 我太懒了。

 
Vinin >> :

也许有人愿意重做它。我太懒了。

那我们就等着吧。>>也许有人可以帮忙)。

 
ALex2008 >> :

我真的想同时测试几对...

我不能自己做...但如果你能帮我做一个多币种的EA,我将非常感激)

如果你想在测试器中 制作一个多币种的EA 原则上是不能 测试的(它只对被测试的一个货币对产生ticks)。为此,一个相同的EA应该使用相同的魔法数字来区分自己的订单和其他EA的订单,例如在其参数中设置的魔法数字;)

 
ForexTools >> :

......要做到这一点,同一个顾问必须能够通过例如在其参数中设置的相同魔法来区分自己的和其他人的命令;)

原则上说,这对我来说并不重要,如果它将是一个真正的多胞胎或只是区分其他的订单。我想在几个货币对上进行交易,而不是在一个货币对上......我想在演示中尝试一两个月......我只是对结果感兴趣......)

 
ForexTools >> :

...要做到这一点,同一个EA必须通过相同的魔法设置来区分自己的和其他人的订单,例如在其参数中;)

...或自动 生成的;))

 
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) - 这是什么?