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

 

下午好,先生们!)

试图为训练神经网络 准备数据。任务是。

有一个矩阵,例如每一行(时间时刻-酒吧)是一个输入向量,而每一列例如是10000。如果有动态数据(行数1,行数2),并且在不同的时间点上数量有变化,该怎么办?

例如,一个矩阵被加载到网络中,每一行都是学习的向量,但对于每一行,有n个行数在时间上动态变化。

一个可能的解决猜想是给矩阵增加额外的列,相当于动态行的列数,事实证明,每个向量都会有来自denamic的列,但就像一行的列一样,只是假设。

比如说

第1矢量

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ..."line1 dynamic" 1 1 1 1 1

sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"line2 dynamic" 1 1 1 1 1 1

解决办法

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ..."line1 dynamic" 2 2 2 2 2

 
Top2n:

下午好,先生们!)

试图为训练神经网络准备数据。任务是。

有一个矩阵,例如每一行(时间时刻-酒吧)是一个输入向量,而每一列例如是10000。如果有动态数据(行数1,行数2),并且在不同的时间点上数量有变化,该怎么办?

例如,一个矩阵被加载到网络中,每一行都是学习的向量,但对于每一行,有n个行数在时间上动态变化。

一个可能的解决猜想是给矩阵增加额外的列,相当于动态行的列数,事实证明,每个向量都会有来自denamic的列,但就像一行的列一样,只是假设。

比如说

第1矢量

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ..."line1 dynamic" 1 1 1 1 1

sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"line2 dynamic" 1 1 1 1 1 1

解决办法

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ..."line1 dynamic" 2 2 2 2 2

而你如何学习一种动态(比如说每小时一次)改变其词汇的语言?这就是神经网络的做法。
 
因此,按照我的理解,这就是MQL5。还是相同的?
 
Andrey Sokolov:
因此,按照我的理解,这就是MQL5。还是相同的?
完全一样。
 
下午好。我创建了一个EA,工作正常,但如果我在EA运行时关闭终端,再打开终端,EA就会重新开始计数。因此,我有一个问题。我需要在我的EA中写什么,以便它在启动时重置输入参数?
 
XFaost:
下午好。我创建了一个EA,工作正常,但如果我在EA运行时关闭终端,再打开终端,EA就会重新开始计数。因此,我有一个问题。我需要在EA中规定什么,以便它在启动时重置输入参数?
我希望我的专家顾问不重置输入参数,而是收集在它关闭之前打开的订单的信息。
 
XFaost:
下午好。我创建了一个EA,它运行良好,但如果我在EA运行时关闭终端,再打开终端,EA就会重新开始计数。因此,我有一个问题。我需要在我的EA中写些什么,以便在我启动它时重置输入参数?
请描述EA的工作方式。也许你需要使用一个不同的原则。如果你仍然需要重置,那么你应该首先定义什么是 "开始时 "的意思。而一般来说,复位是向初始位置的过渡。写下初始设置,并在适当的时候进行设置。
 

问候。你能告诉我什么是错的吗?

EA在价格上方和下方放置带有止损的订单。如果其中一个触发,如果价格远离止损点的幅度超过设定,则调整止损点,如果价格移动到止损点,则不改变。

起初,我只写了买入订单,并如愿以偿。如果我为卖出添加一个镜像,无论价格如何变动,止损都会被设定的值所修正。

一般来说,如果分开,或购买或出售--一切都像它应该的那样工作,但两个部分一起--有一个错误。

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot             = 0.01;
extern int    StopLoss        = 50;
extern int    Slippage        = 5;
extern int    Delta           = 60;
extern int    Delta2          = 170;
extern int    Magic           = 321;

int ticket;
double price, sl, sl2;
datetime counted_bar = 0;

int OnInit()
  {
    if (Digits == 3 || Digits == 5)
   {

       StopLoss      *= 10;
       Delta         *= 10;
       Delta2        *= 10;
      
   }

  
   return(INIT_SUCCEEDED);
  }


void OnTick() {
//////        ПРОДАЖА  ///////////////////////////////////////////////////////
if (SellLimitCount()==0 && SellCount()==0)
{    
  price = NormalizeDouble(Bid - Delta*Point, Digits);
  sl = NormalizeDouble(price + StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_SELLSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Red);
}

if (SellCount()!=0)
  {
   if (Bid < (OrderStopLoss() - NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Bid + StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Red)) Print ("Sell_Order_Modify_Ok");
     else Print ("ERROR_Sell_Order_Modify");
     }  
  }
if (SellLimitCount()!=0)
{
  if(Bid > (OrderOpenPrice() + NormalizeDouble (Delta2*Point, Digits)))
   {    
    if (OrderDelete(ticket, Red)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Odrer_Delete");
   }  
}
/////////////////////////////////////////////////////////////////////////////////
///////       ПОКУПКА ////////////////////////////////////////////////////////
if (BuyLimitCount()==0 && BuyCount()==0)
{
  price = NormalizeDouble(Ask + Delta*Point, Digits);
  sl = NormalizeDouble(price - StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_BUYSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Blue);
}

if (BuyCount()!=0)
  {
    if (Ask > (OrderStopLoss() + NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Ask - StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Blue)) Print ("Buy_Order_Modify_Ok");
     else Print ("ERROR_Buy_Order_Modify");
     }  
  }
if (BuyLimitCount()!=0)
{
  if(Ask < (OrderOpenPrice() - NormalizeDouble (Delta2*Point, Digits)))
   {
    if (OrderDelete(ticket, Blue)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Orde_Delete");
   }  
}
///////////////////////////////////////////////////////////////////////////////

}
//+------------------------------------------------------------------+
int BuyLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUYSTOP)
count++;}}}return(count);}

int BuyCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUY)
count++;}}}return(count);}

int SellLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELLSTOP)
count++;}}}return(count);}

int SellCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELL)
count++;}}}return(count);}
 
Andrey Sokolov:

问候。你能告诉我什么是错的吗?

EA在价格上方和下方放置带有止损的订单。如果其中一个触发,如果价格远离止损点的幅度超过设定,则调整止损点,如果价格移动到止损点,则不改变。

起初,我只写了买入订单,并如愿以偿。如果我为卖出添加一个镜像,无论价格如何变动,止损都会被设定的值所修正。

一般来说,如果单独购买或出售,一切都在正常工作,但两个部分一起 - 有一个错误。

...

你向我们展示的整个代码是一个错误,不是吗?至少,OnTick函数 几乎完全是一个错误...

 
Vitalie Postolache:

一个错误,你是指所显示的整个代码吗?

当代码中有买入和卖出两部分时,那么在挂单 触发后,其止损会因某种原因在任何价格方向上进行修正。而当代码中只有买入或卖出部分时,只有当价格远离它时,止损才会按预期进行修正。
原因: