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

 
trader781:

好吧,我们来做这个。

for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }

对吗?

你还需要大括号,否则只有if() 后面的第一行可以工作。你在不需要的地方有很多托架,然后在需要的地方没有托架。这就破坏了程序的逻辑,有时是非常大的破坏。而柜台不一定是全球性的,但也不是那么重要。

for(i=OrdersTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()
         && OrderMagicNumber()==Magic && OrderType()<2)
         {
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
         }
}
 
sile:
帮我写一下条件:如果账户中的可用资金量 少于存款的50%,那么{动作}MT5

从什么存款?初始?还是从目前的余额中?

如果与余额相比,那么就这样。

if(AccountInfoDouble(ACCOUNT_MARGIN_FREE)/AccountInfoDouble(ACCOUNT_BALANCE)<0.5) {действие}
 
Vitalie Postolache:


我以为他想要一个mt5。

我有一个很好的想法,如何让计数器到ontik的最开始,然后用这个来工作。

现在,在我的情况下,我怎样才能从中得到一些东西呢?

而且,如果数组将是二维和更多(在写入和提取方面有区别)。

我们能不能就这一点谈一谈?
 
trader781:

好吧,我们来做这个。

struct myorder
{
int    Ticket;
double orderopenprice;
int   ordertype;
double profit;
double stoploss;
double  lot;
};

myorder orders[];

int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }
}    


对吗?

不,这是不对的。

你的数组orders[]的值是零。你打算把数据写在哪里?进入一个大小为零的数组中?不可能。你应该用count1+1来增加数组的大小--如果你在向数组写完后增加计数器。通常情况下,在写之前先增加计数器,然后用计数器的大小增加数组的大小,再按索引[count1-1]写入数值。而且,正如上面正确指出的那样--你需要在检查条件之后把所有其他的行动放在大括号里。

为什么你要在没有基本知识和想法的情况下尝试做一些事情呢?只是 "为了运气"?

 
你好。是否有一个通用代码,可以插入任何指标的描述末尾,以便改变该指标的TF(即M5到M1)?
 
Artyom Trishkin:

不,不是的。

你的数组orders[]的值是零。你打算把数据写在哪里?进入一个大小为零的数组中?不可能。你应该用count1+1来增加数组的大小--如果你在向数组写完后增加计数器。通常情况下,在写之前先增加计数器,然后用计数器的大小增加数组的大小,再按索引[count1-1]写入数值。而且,正如上面正确指出的那样--你需要在检查完条件后把所有其他动作放在大括号里。

为什么你要在没有基本知识和想法的情况下尝试做一些事情呢?只是 "为了运气"?

我们不要把腐烂的小便和臭鸡蛋扔在别人学习材料的能力上。你对解决我的问题的建议是通过建立一个结构阵列的方式。我打开教科书,在我能理解的情况下粘贴在一起,并把代码扔在这里,供公众审查,以衡量这一切的正确程度。你不会认为我马上就会做出一个理想的变体吧?
 
trader781:
我们不要向某人的学习能力投掷腐烂的鸡巴和臭鸡蛋。你提出的解决我的问题的建议是通过建立一个结构阵列的方式。我打开教科书,在我能理解的范围内粘贴在一起,并把代码扔在这里供公众审查,以衡量这一切的正确性。你不会认为我马上就会做出一个理想的变体吧?
在如此疯狂的幻想之后,我应该拒绝帮助你吗?我最后一次恳求你:把算法写在一张纸上,用铅笔多看几遍。写下数值和数组的大小--在循环的每个迭代中要写什么和写在哪里。不要寻找你认为合适的代码片断。
了解到教学是困难的,特别是当一个人并不真正想学习的时候。
 
Artyom Trishkin:
在这样一个暴力的幻想之后,我是否应该被劝阻去帮忙。我最后一次恳求你:把算法写在一张纸上,用铅笔多看几遍。写下数值和数组的大小--在循环的每个迭代中,将写什么和写在哪里。不要寻找你认为合适的代码片断。
了解到教学是困难的,特别是当一个人并不真正想学习的时候。

Artyom,这是可以理解的,但在这种情况下我也可以被理解。没有任何效果,在目前的版本中也不会有效果。我已经写了好几页关于命令本身需要从给定的数组中拉出所需的元素,我不知道对于这种特殊情况应该如何写,比如说第5个订单的止损。

至于铅笔和树叶--机器人已经准备了一个月,在任何仪器上都能完美地坠落,我只是想通过添加一个不规则的分支来修改它。

 
trader781:

Artyom,这是可以理解的,但在这种情况下我也可以被理解。在目前的变体中,没有任何东西可以工作,也不会工作。我已经写了好几页,说需要命令本身来拉出这个数组的所需元素,而且我不知道它是如何为这种特殊情况写的,比如说第5单的止损。

我不知道在这种特殊情况下该如何写,例如,第5个订单的止损。

我没有这样的命令。我必须自己做。即--功能。
 
Artyom Trishkin:
没有这样的命令。你需要自己制作。即--一个函数。

好的,那么按照我的理解,有三个不同的自定义函数,其返回值是正确的(如果你寻找三个不同的参数)。

阵列排序

然后

按正确的数字进行ArrayBsearch

然后我如何处理它?

正是从数组到结构元素的转变
原因: