新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 465

 
Rewerpool:

为什么还要这样写呢?

如果你只把EA放在一个符号上,但它会在所有的符号上工作吗?而魔术师将看到他自己的!

我很困惑

在旧的mql4中,条件被从头到尾检查,不管检查条件列表中第一个的结果如何。因此,这种丑陋的写作,渴望减少处理时间。

现在,在某个地方写着,但我不记得在哪里了,如果第一个条件没有满足,那么检查就会停止。因此,用右脚的小指头抓左耳是没有意义的。

 

@Konstantin Nikitin 所以如果我在迭代开始时这样写的话


 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;

Выставляться будут стопы и тейки любым ордерам? И не надо делать опрос на предмет кто торгует Бот или человек?
 
Rewerpool:

因此,如果我在迭代开始时这样写的话

void STOP_TAKE(void)
{
   int SPREAD    = (int)MarketInfo(Symbol(),MODE_SPREAD);
   if (stoploss<STOPLEVEL) stoploss=0; 
   if (takeprofit<STOPLEVEL) takeprofit=0;

     for(int i=0; i<OrdersTotal(); i++)
     {
          if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if(OrderSymbol()!=Symbol()) continue;
     
          int tip = OrderType();
          if(  tip!=OP_BUY && tip!=OP_BUYSTOP && tip!=OP_BUYLIMIT &&
               tip!=OP_SELL && tip!=OP_SELLSTOP && tip!=OP_SELLLIMIT ) continue;
     
          // переменные которые будут использоваться в любых ордерах
          int Ticket = OrderTicket();
          double    OOP = OrderOpenPrice(),
                    OSL = OrderStopLoss(),
                    OTP = OrderTakeProfit();
     
          //---
/* Если это удалить/заблокировать то будет работать со всеми ордерами не обращая внимания эксперта они или нет. Разблокировать, то сначала проверит ордера эксперта их нет то все остальные
          if( OrderMagicNumber() == Magic )
          { //----------Если Ордера Советника
               switch(tip)
               {
                    case OP_BUY:
                    case OP_BUYSTOP:
                    case OP_BUYLIMIT:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         }
                         break;
                         // end case
                         
                    default:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         } // end case
               } // end switch
               
               continue;
          }
*/
          switch(tip)
          {
               case OP_BUY:
               case OP_BUYSTOP:
               case OP_BUYLIMIT:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;       
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    }
                    break;
                    // end case
                         
               default:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    } // end case
          } // end switch
     } // end for
} // end STOP_TAKE
类似这样的事情。
 

下午好。这是他们所写的。

"该产品只能包含一个EX4文件,不允许有其他文件。EX4文件的名称和输入参数的名称必须用拉丁字母书写。建议使用资源,以创建用户友好的界面。

出于安全原因,程序中不允许调用任何DLLs。如果演示程序需要测试数据,程序应自行创建所需的文件并告知用户。你也可以使用ResourceLoad函数添加所需的文件,但要注意的是,所有产品在市场上发布之前都会被检查是否有可能的恶意活动。

禁止根据时间、交易账户的类型或数量、金融工具等对产品的操作嵌入任何限制。所有这些行为都将被视为对买方不友好,不会被容忍。"

说HOW.....向一个指标提出EA请求。

 
Oleksandr Kulibaba:

下午好。这是他们所写的。

"该产品只能包含一个EX4文件,不允许有其他文件。EX4文件的名称和输入参数的名称必须用拉丁字母书写。建议使用资源,以创建用户友好的界面。

出于安全原因,程序中不允许调用任何DLLs。如果演示程序需要测试数据,程序应自行创建所需的文件并通知用户。你也可以使用ResourceLoad函数添加所需的文件,但要注意的是,所有产品在市场上发布之前都会被检查是否有可能的恶意活动。

禁止根据时间、交易账户的类型或数量、金融工具等在产品上建立任何限制。所有这些行为都将被视为对买方不友好,不会被容忍。"

说HOW.....向该指标提出EA请求。

你自己写的答案:使用一个资源

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...
 
Vitaly Muzichenko:

你自己写的答案:使用资源

谢谢你的回答。但我已经读过了,并试图插入它。我拿不到,我做错了什么,或者放错了地方。我在呼吁三个指标。请更详细地描述这个脚本。

什么,哪里,什么参数...预先感谢你。

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
 
Oleksandr Kulibaba:

谢谢你的答复。但我已经读过了,并试图把它放进去。我不能让它工作,我不是做错了就是放错了地方。我在呼吁三个指标。请更详细地描述这个脚本。

什么,哪里,什么参数...预先感谢你。

根据你的需要创建三个或更多的变量,并像例子中那样调用它们handle_ind=iCustom(_Symbol,_Period,":Indicators\blah-blah-blah)插入代码只是为了让人们理解!

iCustom就是这样!

iCustom

Возвращает значение указанного пользовательского индикатора. 



double  iCustom( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   string       name,             // папка/имя_пользовательского индикатора 
   ...                            // список входных параметров индикатора 
   int          mode,             // источник данных 
   int          shift             // сдвиг 
   );
 
如果
if(handle_ind==INVALID_HANDLE) то это значит - не корректный хэндл
 
Rewerpool:

创建三个变量,或者根据你的需要创建更多的变量,并像例子中的handle_ind=iCustom(_Symbol,_Period,": Indicators\blah-blah-blah)插入代码只是为了让人们理解!

iCustom就是这样!

如果

我会试一试的。谢谢你。

 
@Oleksandr Kulibaba 插入你的代码,错误!要有理解力!好人会帮忙的!不清楚你的问题是什么!
 
@Konstantin Nikitin 干得好。从代码中删除了
if ((OSL==0&&stoploss!=0)||(OTP==0&&takeprofit!=0))

现在,每一个刻度都在抽动 )))))


帖子中,你指出了魔术师的代码闭合!我明白!只是情况是这样的:我用手交易,但突然我需要退一步,把控制权交给EA(寻找模式和进入点)。我想把所有的操作分开。但是,按照所有人的要求,停止和取出。也许是我还没有挖对!

原因: