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

 
Alexey Kozitsyn:
我们这样说吧。你展示通过订单的代码,并解释它应该如何做,只有这样我们才能说什么是对的,什么是错的。仅仅是函数的名称并不能帮助你更接近结果。

你好...谢谢你同意帮助我...这似乎是一个小任务,为了健全订单的关闭,可以简单地通过添加所需的事件到适当的文件夹中来完成--事实证明并不那么容易......。以下是我从MQL4参考交易函数 中提取的示例代码

intOrdersHistoryTotal()。

//从交易历史中检索信息
int i,accTotal=OrdersHistoryTotal()。
for(i=0;i<accTotal;i++)
{
//---- 检查选择结果
如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("访问历史数据库错误(",GetLastError(),"))
突破
}
// 在一个订单上工作...

}

...该函数返回客户终端加载的当前账户历史中的关闭和删除的订单数量 历史列表的大小取决于终端的 "账户历史 "标签的当前设置。

它将如何通过它们进行搜索,为什么需要这样做,我不清楚...也许,有必要记住它们,并抛弃它们,这样它们就不会碍事了?

我们应该在新关闭的订单关闭的那一刻发出简短的提示音。所有要在我的客户终端关闭的订单只有两种 类型:通过TrailStopLossTakeProfit 平均。当关闭一个订单(一组订单)时,无论哪个方向(卖出买入),它们应该只用StopLossTakeProfit分隔,并发送至相应的PlaySound函数

Справочник MQL4
Справочник MQL4
  • docs.mql4.com
Справочник MQL4
 
bablusut:

你好...谢谢你同意帮助我...这似乎是一个小任务,为了健全订单的关闭,可以简单地通过添加所需的事件到适当的文件夹中来完成--事实证明并不那么容易......。以下是我从MQL4参考交易函数 中提取的示例代码

intOrdersHistoryTotal()。

//从交易历史中检索信息
int i,accTotal=OrdersHistoryTotal()。
for(i=0;i<accTotal;i++)
{
//---- 检查选择结果
如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("访问历史数据库错误(",GetLastError(),"))
突破
}
// 在一个订单上工作...

}

...该函数返回客户终端加载的当前账户历史中的关闭和删除的订单数量 历史列表的大小取决于终端的 "账户历史 "标签的当前设置。

它将如何通过它们进行搜索,为什么需要这样做,我不清楚......也许,有必要记住它们,并抛弃它们,这样它们就不会碍事了?

我们应该在新关闭的订单关闭的那一刻发出简短的提示音。所有要在我的客户终端关闭的订单只有两种 类型:通过TrailStopLossTakeProfit 平均。当关闭一个订单(一组订单)时,无论哪个方向(卖出买入),它们应该只由StopLossTakeProfit关闭命令分开,并发送至相应的PlaySound函数

顺序应该倒过来搜索,因为0是最前面的,accTotal-1是最后的。在这段代码中,在"//与订单一起工作 "之后,记住注释,并检查SL或TP上是否有关闭注释。
 
Alexey Kozitsyn:
订单应该按照相反的顺序搜索,因为0是最开始的,accTotal-1是最后的。在这段代码中,在"//与订单一起工作 "之后记住注释,并检查是否有SL或TP的结束注释。

intOrdersHistoryTotal()。

//从交易历史中检索信息
int i,accTotal=OrdersHistoryTotal()。
for(i=0;i<accTotal;i++)
{
//---- 检查选择结果
如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("访问历史数据库错误(",GetLastError(),"))
突破
}
// 在一个订单上工作...

}

stringOrderComment()。

弦外之音
如果(OrderSelect(10,SELECT_BY_TICKET)==false)
{
Print("OrderSelect() has returned an error",GetLastError())。
return(0);
}
评论=OrderComment()。

// ...

谢谢你的答复...在加入OrderComment 函数的代码后,(MQL4交易函数参考),该函数返回使用OrdersHistoryTotal 函数选择的订单的评论,代码看起来像这样...但我们难道没有一个功能来跟踪终端历史中的新关闭订单吗?"0-最开始。accTotal-1- 最后"--我们指的是终端历史中的 "第一次关闭 "和 "最后一次关闭",是按时间来计算的吗...?我说对了吗?


Справочник MQL4
Справочник MQL4
  • docs.mql4.com
Справочник MQL4
 
bablusut:

但我们没有一个功能来跟踪终端历史中的新关闭订单吗?

没有标准的。

  int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }
要确定一条线在另一条线中的存在 - 使用与线有关的工作功能。
 
Alexey Kozitsyn:

没有标准的。

  int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }
要确定一个字符串是否存在于另一个字符串中 - 使用字符串函数。

谢谢你...你是指函数StringFind= 在一个字符串中搜索一个子串。

int StringFind(
string string_value, //我们正在搜索的字符串
string match_substring, //我们正在搜索的内容
int start_pos=0 //从哪里开始搜索?

);

参数
string_value
[in] 要搜索的字符串。
Match_substring
[in] 要搜索的Match_substring。
start_pos=0
[in] 在字符串中应开始搜索的位置。
返回的值

返回要搜索的子串开始的字符串中的位置号,如果没有找到子串,则返回-1。

...或StringCompare 函数 -比较两个字符串


StringCompare - Строковые функции - Справочник MQL4
StringCompare - Строковые функции - Справочник MQL4
  • docs.mql4.com
StringCompare - Строковые функции - Справочник MQL4
 
bablusut:

谢谢你...你是指函数StringFind= 在一个字符串中搜索一个子串。

int StringFind(
string string_value, // 我们正在搜索的字符串
string match_substring, //我们正在搜索的内容
int start_pos=0 //从哪里开始搜索?

);

参数
string_value
[in] 要搜索的字符串。
Match_substring
[in] 要搜索的Match_substring。
start_pos=0
[in] 在字符串中应开始搜索的位置。
返回的值

返回要搜索的子串开始的字符串中的位置号,如果没有找到子串,则返回-1。

...


确实如此。
 
Alexey Kozitsyn:
正确。

谢谢你...然后,代码将看起来像这样。

 int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }

int  StringFind(
   string  string_value,        // строка, в которой ищем
   string  match_substring,     // что ищем
   int     start_pos=0          // с какой позиции начинать поиск

   ); 



 

 
bablusut:

谢谢你...然后,代码将采取以下形式。

 int i,accTotal=OrdersHistoryTotal();
  string comment;
  for(i=accTotal-1;i>=0;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     // работа с ордером ...
     comment = OrderComment();
     // Проверяем, есть ли в комментарии признак закрытия ордера по ТП или СЛ
    }

int  StringFind(
   string  string_value,        // строка, в которой ищем
   string  match_substring,     // что ищем
   int     start_pos=0          // с какой позиции начинать поиск

   ); 



 

不,试着理解你在做什么。你所写的只是一个原型函数(即只是描述它的作用)。所以你只是撕掉了一块文件。你需要使用它。所以你必须用你自己的价值观来代替论据。而该函数将返回结果。那么这个结果必须被处理。
 

关于交易、自动交易系统和交易策略测试的论坛

初学者的问题

A1exPit, 2016.11.30 22:14

你能告诉我OrderSelect by SELECT_BY_POS哪个0订单是最后下的还是第一个?我正在尝试这两种方式,反之亦然,但错误的修改#0是飞出来的。

 
Vladimir Karputov:

让我们看一下代码。
原因: