初学者的问题 MQL4 MT4 MetaTrader 4 - 页 222

 

你可以查看交易机器人

//+------------------------------------------------------------------+

//| Experts1.mq4 |

//| Copyright 2017, MetaQuotes Software Corp.

//| https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#属性链接 "https://www.mql5.com"

#财产版本 "1.00"

#属性严格

//+------------------------------------------------------------------+

//| https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2020, MetaQuotes Software Corp.

#属性链接 "https://www.mql5.com"


输入双Lots=0.01。

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int OnInit()

(OrderSend(Symbol(),OP_BUY,Lots,3,0,Ask+0.0084,Ask-0.0084)


double lot=Lots。

如果盈利,则Lots=lot+0.01 否则Lots=lot-0.01

如果Lots=0,那么Lots=0.01

如果Lots>0.03,那么Lots=0.01

//---

//---

return()。

}


Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
One Click Close The script allows users to easily close positions if their profit/loss reaches or exceeds a value specified in pips. Please set slippage value first. Sometimes some positions do not close due to high volatility of the market. Please set larger slippage or restart the script. The free demo version is: ...
 
你好,亲爱的专业人士,请告诉我挂单在一定的价格运动中移动一次 时,如何写出条件例如,在1.28下了止损单,价格移动到1.50,挂单移动到离价格一定的距离,但没有在价格后面不断移动,它只移动一次,即移动例如10个点,即使价格进一步上升也停止问候你,亚历山大!
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 

下午好,亲爱的专家们!

请帮助,提示如何做,在哪里读,写一部分代码。

我附上了部分代码。我需要在开立订单或限价订单时能够输入我的评论。也就是说,不是在代码中,而是在打开EA面板时。

extern double Lots     = 0.1;
extern int StopLoss    = 250;
extern int TakeProfit  = 150;
extern int Magic       = 1;

double SL, TP;

int ticket;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double price = Ask;

   if(BUY() == 0)
     {
      SL = NormalizeDouble(Ask - StopLoss*Point, 5);
      TP = NormalizeDouble(Ask + TakeProfit*Point, 5);
      ticket = OrderSend(Symbol(), OP_BUY, Lots, price, 3, SL, TP, "", Magic, 0, Red);
      if(ticket<0)
         Print("Не удалось открыть ордер");
     }
  }
//+------------------------------------------------------------------+
int BUY()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic &&
         OrderType() == OP_BUY)
        {
         count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
 
d4vv:

我需要在开立订单或限价订单时能够输入我的评论。

input string Mycomment="Preved Medved";


ticket = OrderSend(Symbol(), OP_BUY, Lots, price, 3, SL, TP, Mycomment, Magic, 0, Red);

注释是在订单创建时写的,不能再次更改。

 
Aleksei Stepanenko:

注释是在订单创建时写的,不能再更改。

非常感谢你。这正是我所需要的。

 
Knelson:
请教如何写一个条件,当一个挂单在某个价格变动时将被移动一次

1.创建一个数组,在其中存储未结订单的票据和订单已经被移动的标志。

struct Orders
   {
   int ticket;
   bool moved;
   } orders[];

2.追踪新出现的订单,并在这个数组中记录带有 "未移动 "标志的开放订单的信息。

bool finded;
int index==ArraySize(orders)-1;
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;
   if(OrderType()!=OP_BUYSTOP && OrderType()!=OP_SELLSTOP) continue;
   finded=false;
   for(int j=index; j>=0; j--)
      {
      if(orders[j].ticket==OrderTicket())
         {
         finded=true;
         break;
         }
      }
   if(!finded)
      {
      ArrayResize(orders,++index+1);
      orders[index].ticket=OrderTicket();
      orders[index].moved=false;
      }
   }

3.如果订单被关闭、删除或转换,从阵列中删除信息。

4.检查移动的条件,如果满足条件并且标志 "没有移动",则移动并将标志改为 "移动"。

 
Aleksei Stepanenko:

1.创建一个数组,在其中存储未结订单的票据和订单已经被移动的标志。

2.追踪新出现的订单,并在这个数组中记录带有 "未移动 "标志的开放订单的信息。

3.如果订单被关闭、删除或转换,从阵列中删除信息。

4.检查移动的条件,如果条件已经到来,并且标志 "没有移动",则移动并将标志改为 "移动"。

我认为这并不可靠。

我会以更简单的方式解决这样的问题:放置一个神奇数字2的挂单,并删除一个神奇数字1的挂单,在此条件下,该订单应被移动。

代码很简单--在收到嘀嗒声后,如果发现有需要移动的神奇数字1的订单,则循环查看,然后我们将删除这个订单,并放置一个新的神奇数字2的订单。

 

是的,这是个不错的选择。

 
Aleksei Stepanenko:

是的,这是个好选择。

UPD: 代码将是简单的--当嘀嗒声响起时,如果发现需要移动,就在具有神奇数字1的订单上进行循环,然后删除这个订单并设置一个具有神奇数字2的新订单

....,然后我们将尝试设置一个新的魔法数字2的订单,如果它是确定的,我们将删除魔法数字1的订单。

所以要想出更少的检查--例如止损位的水平已经扩大,一旦发现我们已经删除了订单,将无法移动订单。

那样的话;)

 
观察人类的大脑(主要是我自己的大脑,但不仅如此),我发现一个属性--隧道。思维过程在思维定式里面进行,就像在一个隧道里。而以我自己的努力,要跳出这个圈子并不容易。我 "与我密不可分,看来这个思路是正确的,绝对正确。但后来来自外部的知识进来了,你开始意识到,你一直是你的想法的囚徒。奇迹...