给MQL专家的一个问题 - 页 2

 
春天
 
伙计们,非常感谢大家,我看看什么合适。春天....
 

我为这个可能不正确的问题道歉!

我目前正在处理反编译的EA代码。我无法 "进入 "一点点的代码。

//-----------------------------------------------------------      
int TotalSell() {  int count=0;
   for (int i=0; i<OrdersTotal(); i++) {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_SELL) count++;}return (count);}
//------------------------------------------------------------      
int TotalSellStop() { int count=0;
   for (int i=0; i<OrdersTotal(); i++){
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_SELLSTOP) count++;} return (count);}
//-------------------------------------------------------------------

请为我逐行解读(用俄语)这个晦涩的(顶部或底部)结构?

总的来说,这个专家顾问的 "概念",我想明白了。最初,设置了两个挂单--买入止损和卖出止损。当其中一个挂单触发时,第二个挂单被删除。但是,与此同时,在未平仓的头寸 上设置了追踪止损,并且设置了相反的追踪止损,而不是止损价格!这就意味着,我们的交易是不可能的。

 
//-----------------------------------------------------------      
int TotalSell() {  int count=0;                                    //Функция возвращающая количество устаноавленныых SELL ордеров 
   for (int i=0; i<OrdersTotal(); i++) {                           //задается цикл от ноля до общего количества всех ордеров 
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;        //Выбирается ордер по позиции из списка, если не выбран - выход
      if (OrderSymbol()!=Symbol()) continue;                       //Сравнивается по символу, если соответствует - продолжить 
      if (OrderType()==OP_SELL) count++;}return (count);}          //Сравнивается по типу SELL, если соответствует то увеличивает счетчик ордеров на 1
//------------------------------------------------------------      
int TotalSellStop() { int count=0;                                 //Тоже что и предидущая функция но для SELLSTOP ордеров
   for (int i=0; i<OrdersTotal(); i++){
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_SELLSTOP) count++;} return (count);}
//-------------------------------------------------------------------

这就是它的全部内容

 
谢谢你,xeon!
 

大家晚上好!出现了一种需求。

要使用逆转未结头寸 的脚本。

令我惊讶的是,我发现这个脚本由于某种原因而无法工作!我的意思是,它是由我来完成的。我试图弄清楚它,但....它不起作用。

而在那里,显然,--太机智的作者得到了设计......,插入了低能的附带评论。

/ Развернуть все ордера.mq4
// Скрипт
#property copyright "mandorr@gmail.com"
#include <WinUser32.mqh>
void start()
{
   int i=0, count=0;
   //закладываем массивы значений
   int cmd[];
   int ticket[];
   double lots[];
   string symbol[];
   string type[];
//------------------------------------------------------------   
   for (i=0; i<OrdersTotal(); i++)           {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
      if (OrderType()==OP_BUY || OrderType()==OP_SELL)      {
         ArrayResize(cmd,count+1); 
         ArrayResize(ticket,count+1); 
         ArrayResize(lots,count+1); 
         ArrayResize(symbol,count+1); 
         ArrayResize(type,count+1); 
         cmd[count]=OrderType();
         ticket[count]=OrderTicket();
         lots[count]=OrderLots();
         symbol[count]=OrderSymbol();
         if (OrderType()==OP_BUY) type[count]="Buy";//если открыта длинная позиция
         // заносим её в массив "Buy"
         else type[count]="Sell";// иначе в массив "Sell"
         count++;                                            }
   }
//---------------------------------------------------------------   
   string space="    ";
   string title="Кароче_В_натуре";
   string msg="Развернуть:"+"\n";
   for (i=0; i<count; i++) msg=msg+"\n"+"Order "+ticket[i]+" "+type[i]+" "+DoubleToStr(lots[i],1)+" Lots "+symbol[i]+space;
   if (MessageBox(msg,title,MB_YESNO|MB_ICONQUESTION)!=IDYES)
   {
      title="Аха";
      string ends=""; if (count>1) ends="и";
      msg="Ну и хрен с ним"+ends+" ...    "; 
      MessageBox(msg,title,MB_OK|MB_ICONEXCLAMATION);
      return;
   }
   for (i=0; i<count; i++)
   {
      if(!OrderSelect(ticket[i],SELECT_BY_TICKET)) continue;
      double ask=MarketInfo(symbol[i],MODE_ASK);
      double bid=MarketInfo(symbol[i],MODE_BID);
      int slippage=3;
      if (cmd[i]==OP_BUY )
      {
         OrderClose(ticket[i],lots[i],bid,slippage);
         OrderSend(symbol[i],OP_SELL,lots[i],bid,slippage,0,0,NULL,0,0);
      }
      if (cmd[i]==OP_SELL)
      {
         OrderClose(ticket[i],lots[i],ask,slippage);
         OrderSend(symbol[i],OP_BUY ,lots[i],ask,slippage,0,0,NULL,0,0);
      }
   }
}
// End
你能告诉我为什么它不工作吗?
 
// Развернуть все ордера.mq4
这很奇怪,所有的东西都在工作,只是把它变成这样并不是一件坏事。
 

这不是问题的关键。我把脚本放在图表上(Alpari演示)。我在出现的窗口中按下 "YES "按钮,但什么也没有发生。位置没有颠倒。在按下的那一刻,在日志中

2008.04.29 01:15:41 脚本 Revers__all_orders EURJPY,M15: 删除

 

下午好。请为这个指标写一个iCustom 表达式。



下面是它的代码--

#property indicator_chart_window
#property indicator_buffers 2

//---- input parameters
extern int R=3;
//---- buffers
double HighBuffer[];
double LowBuffer[];
double VALUE1,VALUE2,VALUE11,VALUE22;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   SetIndexStyle(0,DRAW_ARROW,EMPTY,1,Blue);
   SetIndexStyle(1,DRAW_ARROW,EMPTY,1,Yellow);
   SetIndexArrow(0, 0x9F);
   SetIndexArrow(1, 0x9F);

   SetIndexBuffer(0,HighBuffer);
   SetIndexBuffer(1,LowBuffer);

   SetIndexEmptyValue(0,0);
   SetIndexEmptyValue(1,0);
//---- name for DataWindow and indicator subwindow label
   short_name="HiLo";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//----
   SetIndexDrawBegin(0,10);
   SetIndexDrawBegin(1,10);
//----
   return(0);
  }
//+-----------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
ObjectsDeleteAll(0);   
//----
   return(0);
  }
//+-------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted(),i,shift,Swing;   

//---- TODO: add your code here
i=(Bars-counted_bars)-1;

for (shift=i; shift>=0;shift--)  {

VALUE1=iMA(NULL,0,R,0,MODE_SMA,PRICE_HIGH,shift+1);
VALUE2=iMA(NULL,0,R,0,MODE_SMA,PRICE_LOW,shift+1);

if (Close[shift+1]<VALUE2 ) Swing=-1;
if (Close[shift+1]>VALUE1 ) Swing=1;

if (Swing==1) { HighBuffer[shift]=VALUE2; LowBuffer[shift]=0;  }
if (Swing==-1) { LowBuffer[shift]=VALUE1; HighBuffer[shift]=0; }
//----
}
   return(0);
  }
当然是为了能够在 "属性 "中设置R参数和条形数字。
 

是的,有点像这样,如果你考虑到指标名称是hilo.mq4。

extern int iR=3;
extern int SignalBar=1;
//.......
//---получение значения HighBuffer
double buy = iCustom( NULL,0, "hilo",
iR,
0, // № буффера
SignalBar ); // № бара

//---получение значения LowBuffer
double sell = iCustom( NULL,0, "hilo",
iR,
1, // № буффера
SignalBar ); // № бара