帮助我学习如何编程。

 

我如何收集和使用有关交易的信息?我需要收集所有EA头寸的信息,它们的数量、利润、类型、开盘价。然后参考最近的位置,或最大的位置的信息。我发现用数组写东西很困难。

1.有必要处理数组吗?

2.使用一个结构数组还是不同的数组更好?

3.如果我无论如何都要分配内存,为什么我需要一个动态数组?使用一个静态数组不是更容易吗?或者我们不能没有一个动态的,因为它可以被反向索引?


没有op的示例代码,因为我根本写不出这个结构,如果你不介意的话,谢谢。

 
pribludilsa:

我如何收集和使用有关交易的信息?我需要收集所有EA头寸的信息,它们的数量、利润、类型、开盘价。然后参考最近的位置,或最大的位置的信息。我发现用数组写东西很困难。

1.有必要处理数组吗?

2.使用一个结构数组还是不同的数组更好?

3.如果我无论如何都要分配内存,为什么我需要一个动态数组?使用一个静态数组不是更容易吗?或者我们不能没有一个动态的,因为它可以被反向索引?


没有op的示例代码,因为我根本写不出这个结构,如果不是太麻烦的话,谢谢。

为什么要建造任何东西?你需要循环处理这些职位,并处理这些信息--而且你不需要组装它。你在同一时刻收集的任何东西都是过时的信息。

 

1.在处理贸易历史时,通常不需要使用数组。这大致如例子中:https://www.mql5.com/ru/docs/trading/historyselect。 值得探索的是,链接左侧栏目中的所有功能(以及那里的所有例子)。

2.阵列结构是非常方便的。但是可以应用于多维数组的内置函数--ArraySort()等--却不能用它来工作。

3.如果你确信最初指定的数组大小足够,你也可以使用静态数组。如果他们的规模是合理的。

 
Vladimir Karputov:

为什么要收集任何东西?你需要循环浏览这些项目并处理这些信息--而你不需要收集这些信息。你在同一时间收集的任何东西都是过时的信息。

我正试图写一个没有op的网格。所以我决定先练习一下,我似乎无法构建一个进入阵列的条目。或者,也许我不需要它?什么是最好的方法?好吧,我是在循环思考。我就是这样开始的。
int OnInit()
{
ENUM_POSITIONS_TYPE ar [1000]; //проинициализирую нулем еще, просто я не копирую, а вручную всё пишу, и некоторые очевидные куски не пишу.
 return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{}
void OnTick()
{
for(int index=PositionsTotal()-1; index>=0; index--)
{
ulong ticket=PositionGetTicket(index);
PositionSelectByTicket(ticket); // И вот я готов вызывать функции для выуживания данных, только я не знаю //как их вписывать в массив. 
 
Dmitry Fedoseev:

1.在处理贸易历史时,通常不需要使用数组。这大致如例子中:https://www.mql5.com/ru/docs/trading/historyselect。 值得探索的是,链接左侧栏目中的所有功能(以及那里的所有例子)。

2.阵列结构是非常方便的。但是可以应用于多维数组的内置函数--ArraySort()等--却不能用它来工作。

3.如果你确信最初指定的数组大小足够,你也可以使用静态数组。如果他们的规模是合理的。

不是我有故事,而是我想分析的立场是开放的。什么是最好的方法?
 
我正在写一个没有OOP的网格。我需要找出哪个未结头寸 是最大的,是什么类型的交易,买入还是卖出。我的理解是,我需要首先从循环中的每个位置收集数据,将其写入一个数组,然后分析该数组,或者取最近的元素,如果它是动态的反向索引。
 
pribludilsa:
这与历史无关,我想分析一下已开的仓位。如何做得更好?

几乎一样,但没有HistorySelect()。我们从PositionsToatal()函数开始,然后通过该链接探索所有以Position开头的函数

 
pribludilsa:
我写一个没有OOP的网格。我需要知道哪个未结头寸 是最大的,是通过哪种类型的交易,买入或卖出。我的理解是,我应该首先从循环中的每个位置收集数据,将其写入一个数组,然后分析该数组,如果是动态的反向索引,则取最新的元素。

你不必排列头寸,边走边寻找高点和低点。

 
Dmitry Fedoseev:

你不需要通过数组,一边寻找最大和最小值。


谢谢你。但你能给我们一个简短的例子吗?我们需要把它写下来进行比较,不是吗?除了写在一个数组里,还能写在哪里?我想不出不写怎么行。我们在一个循环通道中处理一个位置,如果是在另一个循环通道中,我们如何比较另一个位置?

 
pribludilsa:

谢谢你。你能给我们举个简短的例子吗?我们需要把它写下来进行比较,不是吗?并把它写在哪里,而是写在一个数组中?我想不出不写怎么行。我们在一个循环通道中处理一个位置,如果是在另一个循环通道中,我们如何比较另一个位置?

int Magic=123;

double maxBuyPrice=0;
ulong maxBuyTicket=0;
double minSellPrice=DBL_MAX;
ulong minSellTicket=0;   

for(int i=0;i<PositionsTotal();i++){
   ulong ticket=PositionGetTicket(i);
   if(ticket!=0){
      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol()){
         long type=PositionGetInteger(POSITION_TYPE);
         if(type==POSITION_TYPE_BUY){
            if(PositionGetDouble(POSITION_PRICE_OPEN)>maxBuyPrice){
               maxBuyPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               maxBuyTicket=ticket; // тут можно и другие данные позиции запоминать в переменные
            }
         }
         else if(type==POSITION_TYPE_SELL){
            if(PositionGetDouble(POSITION_PRICE_OPEN)<minSellPrice){
               minSellPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               minSellTicket=ticket; // и тут
            }      
         }
      }
   }
}

if(maxBuyTicket!=0){
   
}
if(minSellTicket!=0){

}
 
Dmitry Fedoseev:

谢谢你的例子。

      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol())

我以为我是唯一一个喜欢这样说的人,而不是写 "我不知道"。

      if(PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetString(POSITION_SYMBOL)==Symbol())

hz的意思是 "我想知道"...不要误会...


ps;这有助于在程序调试过程中跟踪一切。