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

 

你可以稍微修改我的函数,以返回给定乐器和魔术师的订单 总数。

 
ALex2008 писал(а)>>

如果你不知道该怎么做,你也不知道该怎么做......我并不关心它是否会成为一个真正的多......或只是区分别人的订单......。一件事的本质--让它在几对上工作,而不是在一对上)而在演示上测试它不是问题,只是一两个月,但结果是有趣的)

拟定多重专家顾问的逻辑,越详细越好,也许你不需要帮助。

作为一项规则,对任务的清晰理解是其成功的90%。

 
sergeev >> :

顺便说一句,你的代码里有错误!很多!"。

iLow(PERIOD_H4,0,0) - 这是什么?

当前蜡烛的低点))

的确如此......!那么它是如何在测试中发挥作用的呢?

我不明白我怎么会弄成这样。它应该是iLow(NULL,PERIOD_H4,0)。

 
xeon >> :

拟定多价专家的逻辑,越详细越好,你可能不需要任何帮助了。

作为一项规则,对任务的清晰理解是其成功的90%。

逻辑没有错)我只是没有经验。我理解你需要通过任何属性来跟踪订单,但由于我以前从未写过这样的东西,恐怕只会有一个问题......关于函数和它们的执行)

 
ALex2008 писал(а)>>

逻辑没有错)我只是没有经验......我理解按任何属性追踪订单的需要,但由于我以前从未写过这样的东西,恐怕只会有一个问题......关于函数和它们的执行)

请看上一页的功能

 
Vinin >> :

见上页的功能

谢谢)我将尝试把它放在代码中)

开始写...

#define MAGIC 7779

而不是这个--

   if(OrdersTotal()==0){
      mod=false;
      SetOrders();}

写这个---

   if( Order_Count_Calculate(Symbol(), MAGIC)==0){
      mod=false;
      SetOrders();}

...失败了 - 'Order_Count_Calculate' - 函数没有返回结果

如果我理解正确的话,该函数应该找到当前符号Symbol()的所有订单,并以MAGIC
 
ALex2008 писал(а)>>

谢谢你)我将尝试把它放在代码中)

开始写...

这正是你不想要的东西extern string _Symbol = Symbol()。

尽管可以定义一个变量,而且最好在inite()或start()中赋值。

 
我在第一个函数上就跌倒了......(我明白了,但我不知道如何正确使用它......。
 
ALex2008 писал(а)>>

逻辑没有错)我只是没有经验......我理解按任何属性追踪订单的需要,但由于我以前从未写过这样的东西,恐怕只会有一个问题......关于函数和它们的执行)

Eh....我担心你不明白..............

任务--"我想让它飞起来",这不是逻辑--什么飞到哪里去了,等等。

--------------------------------------------

任务的一个简单例子。

同时使用EURUSD, GBPUSD, USDCHF, USDJPY。

H1期间。

......................

货币对选择条件

购买条件

卖出设置条件

.......................

下面是一个简短的实施例子。

int MAGIC = 322223;
string Sym[]={"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};    //Внесем в массив валютные пары с которыми будем работать
int start(){
   
   int s = SymbolSelect();                   //Функция выбора валютной пары
   if( SelectOrder( Sym[ s],OP_BUY, MAGIC)<0){   //Если нет установленного ордера по выбранному символу
      UpTrend( Sym[ s]);                       //Проверим условие установки ордера 
   }
   if( SelectOrder( Sym[ s],OP_SELL, MAGIC)<0){  //Если нет установленного ордера по выбранному символу
      DownTrend( Sym[ s]);                     //Проверим условие установки ордера 
   }

}


int SymbolSelect(){
  int s=-1;
  //Условие выбора валютной пары для работы  
   
  return( s)
}
    //+-------------------Выбор ордера---------------------------+
int SelectOrder(string Sym,int Tip,int MAGIC){
    int TotOrd=OrdersTotal();
    int OrdTick=-1;
    for(int OrdPos= TotOrd-1; OrdPos>=0; OrdPos--){
        if(OrderSelect( OrdPos, SELECT_BY_POS, MODE_TRADES)==true){
           if(OrderSymbol()== Sym){                                           //Есть ли ордера с нужным символом
              if(OrderType()== Tip){                                          //Если нужный тип ордера  
                 if( MAGIC==0){ MAGIC=OrderMagicNumber();}                     //Если магик = 0,неучитывать
                 if(OrderMagicNumber() == MAGIC){                            //Есть ли ордера с нужным Магик номером
                    OrdTick = OrderTicket(); break;                          //Запишем в переменную его тикет и прервем цикл 
    }}}}}
    return( OrdTick);                                                         //Возвращает тикет найденного ордера или -1
}
bool UpTrend(string Sym){
     //Условие установки BUY ордера
}
bool DownTrend(string Sym){
    //Условие установки SELL ордера
}

等。

我的意思是,如果你对逻辑进行详细的思考,你就不会在实现上有任何问题。

 
xeon >> :

......我的意思是,如果你详细思考了逻辑,你就不会有任何实施上的问题。

我今天会考虑这个问题...我觉得我找到了一个头痛的问题))谢谢你。

总之,这里有一个带有错误的草稿......>>纠正我)。

extern double Profit = 3000;

int MAGIC = 322223;

string Sym[]={"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};    //Внесем в массив валютные пары с которыми будем работать

double b0, b1, s0, s1, StopLoss, Enter;
bool dwnSym, upSym, mod;

int init(){ Profit*=Point;
}

int start()
{
   
      int s = SymbolSelect();                      //Функция выбора валютной пары
      if( SelectOrder( Sym[ s],OP_BUYSTOP, MAGIC)<0){  //Если нет установленного ордера по выбранному символу
         UpTrend( Sym[ s]);                          //Проверим условие установки ордера 
         }
      if( SelectOrder( Sym[ s],OP_SELLSTOP, MAGIC)<0){ //Если нет установленного ордера по выбранному символу
         DownTrend( Sym[ s]);                        //Проверим условие установки ордера 
         }
      
      
      if( SelectOrder( Sym[ s],OP_BUYSTOP, MAGIC)>0 && AccountProfit()&& (! mod)){  //Если установлен ордер по выбранному символу
         SetStopBuy( Sym[ s]);                                                  //и он открылся, ставим стоп
         }
      if( SelectOrder( Sym[ s],OP_SELLSTOP, MAGIC)>0 && AccountProfit()&& (! mod)){ //Если установлен ордер по выбранному символу
         SetStopSell( Sym[ s]);                                                 //и он открылся, ставим стоп
         }
}

   int SymbolSelect(){
   int s=-1;
   return( s);}
   
//+-------------------Выбор ордера---------------------------+
   int SelectOrder(string Sym,int Tip,int MAGIC){
      int TotOrd=OrdersTotal();
      int OrdTick=-1;
      for(int OrdPos= TotOrd-1; OrdPos>=0; OrdPos--){
         if(OrderSelect( OrdPos, SELECT_BY_POS, MODE_TRADES)==true){
            if(OrderSymbol()== Sym){                                           //Есть ли ордера с нужным символом
               if(OrderType()== Tip){                                          //Если нужный тип ордера  
                  if( MAGIC==0){ MAGIC=OrderMagicNumber();}                     //Если магик = 0,неучитывать
                  if(OrderMagicNumber() == MAGIC){                            //Есть ли ордера с нужным Магик номером
                     OrdTick = OrderTicket(); break;                          //Запишем в переменную его тикет и прервем цикл 
      }}}}}
    return( OrdTick);}                                                         //Возвращает тикет найденного ордера или -1


//Условие и установка BUY ордера
   bool UpTrend(string Sym){
       
       if((iOpen( Sym,PERIOD_H4,1) - iClose( Sym,PERIOD_H4,1) <= 0) &&
         (iOpen( Sym,PERIOD_H4,2) - iClose( Sym,PERIOD_H4,2) > 0)){
          upSym=false;
          dwnSym=true;
          CloseOpenOrdersAndCancelPending();
          double Enter=iHigh( Sym,PERIOD_H4,1)+(Ask-Bid)+10*Point;
          OrderSend( Sym, OP_BUYSTOP, 0.1, Enter, 0, 0, Ask+ Profit, 0, 0,0, Green);}
   }

//Условие и установка SELL ордера
   bool DownTrend(string Sym){
       
       if((iOpen( Sym,PERIOD_H4,1) - iClose( Sym,PERIOD_H4,1) >= 0) &&
         (iOpen( Sym,PERIOD_H4,2) - iClose( Sym,PERIOD_H4,2) < 0)){
          upSym=true;
          dwnSym=false;
          CloseOpenOrdersAndCancelPending();
          double Enter=iLow( Sym,PERIOD_H4,1)-10*Point;
          OrderSend( Sym, OP_SELLSTOP, 0.1, Enter, 0, 0, Bid- Profit, 0, 0,0, Green);}
         
   }
   
//-------Вычисление и утановка стопа для бай
void SetStopBuy(string Sym)
   {
      RefreshRates();
      double b0=iLow( Sym,PERIOD_H4,0)-10*Point;
      double b1=iLow( Sym,PERIOD_H4,1)-10*Point;
      
            if( b0< b1) StopLoss= b1;
            else StopLoss= b0;
            RefreshRates();
            mod=OrderModify( OrdTick,OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
   } 
   
 //-------Вычисление и утановка стопа для сел
void SetStopSell(string Sym)
   {
      RefreshRates();
      double s0=iHigh( Sym,PERIOD_H4,0)+(Ask-Bid)+10*Point;
      double s1=iHigh( Sym,PERIOD_H4,1)+(Ask-Bid)+10*Point;
      
            if( s0< s1) StopLoss= s0;
            else StopLoss= s1;
            RefreshRates();
            mod=OrderModify( OrdTick,OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
   }
   
void CloseOpenOrdersAndCancelPending()
   {
      for (int i=OrdersTotal()-1; i>=0; i--){
      if (!OrderSelect( i, SELECT_BY_POS))  continue;
      if (OrderSymbol()!= Sym)        continue;
      OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10);}
   }