[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 452

 

尊敬的程序员,请帮我写一段代码,其原理如下 - 买入信号 - 开立买入1的头寸.SL.TP.转为无损。

卖出信号 - 打开卖出1的位置。SL.TP.转移到无损的。买入--如果有开放的买入1和卖出1头寸,我们就开放买入2。卖出信号--如果有买入1和买入1的开仓,那么我们就打开卖出2。买入信号--如果有未结头寸,卖出1。 买入1。卖出2.然后关闭卖出2.打开买入2.卖出信号 - 如果有开放的买入1。卖出1.买入2.然后我们将关闭买入2.打开卖出2.市场的工作不应超过3个订单。如果有人能帮助,非常感谢。

 
Sepulca:

不要麻烦动态数组,提前指定,有储备,或者你没有足够的内存?

我的记忆是可以接受的,但这不是这里的重点 :)

指定一个可能有大量元素的数组有什么意义,如果这些元素的数量会少很多倍?

毕竟,通过创建一个数组,它已经占据了部分操作内存。

 
ilunga:
正是

我稍微修改了一下脚本。

//+------------------------------------------------------------------------------------------+
//|                                                                     ArraySetAsSeries.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скрипта
   double array1[][6];                                                   //объявляем массив-источник (массив, из к-о будут скопированы данные)
   double array2[][6];                                                   //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
                                                                         //момент объявления заполнен некоторыми данными
   int element_1=ArrayCopyRates(array1);                                 //копируем данные баров текущего графика в массив array1 
   int element_2=ArrayCopy(array2,array1,0,0,WHOLE_ARRAY);               //копируем данные всех баров в пользовательский массив
   bool element_3=ArrayGetAsSeries(array2);                              //проверка: является ли массив array1 массивом-таймсерией
   bool try_1=ArraySetAsSeries(array2,false);                            //устанавливаем НАПРАВЛЕНИЕ индексирования массива  
   bool element_4=ArrayGetAsSeries(array2);                              //проверка: является ли массив array2 массивом-таймсерией
   double element=array2[0][1];                                          //получаем значение цены открытия нулевого бара
//----------------------------------------------------------------------------------------- 2 -
   Comment("\nФункция ArrayCopyRates(array1) вернула: ",element_1,
           "\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: ",element_2,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_3,
           "\nФункция ArraySetAsSeries(array2;false) вернула: ",try_1,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_4,
           "\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: ",element,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",
           MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000,
           " миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

结果如下。


一个问题自然而然地产生了:在这种情况下,我使用ArrayCopyRates(array1)函数将当前图表中的条形数据复制到一个二维数组array1中。然后在下一行用函数ArrayCopy(array2,array1,0,0,WHOLE_ARRAY)我把array1的数据复制到array2中。然后,使用ArrayGetAsSeries函数,我检查了array2是否是一个数组-时间序列。结果发现(正如你从截图中看到的),这个数组是一个时间序列数组,尽管我之前没有用ArraySetAsSeries函数来 "处理 "它。

问题:为什么在第一种情况下(上一个问题)我需要使用ArraySetAsSeries函数(使我的数组被组织成一个时间序列数组),而在这种情况下我不需要这样的处理。

P.S. 抱歉我的坚持,我只是想充分了解它,这样就不会留下 "历史的空白"。感谢之前所有的回复。

 

我想不明白,或者说我是个哑巴 ....

理论上它应该是0.3,但由于某些原因,它是0.00 ....

  Comment(3/10);

还给出了0...那么,你是如何得到小数的?????

int start()
  {
double t;
t=3/10;
   Comment(t);

   return(0);
  }

也是零 ....

我不知道该用什么样的手鼓来跳.......

 
VOLDEMAR:

我想不明白,或者说我是个哑巴 ....

理论上它应该是0.3,但由于某些原因,它是0.00 ....

还给出了0...那么,你是如何得到小数的?????

也是零 ....

我不知道该用什么样的手鼓来跳.......

每天阅读文件3次,每次4-5小时。然后才用手鼓跳。

3.0/10.0

 

你有什么想法吗?

也许我们应该制作足够的教科书?

也许要做充分的培训?

也许你应该把这些东西写在哪里?

也许那时问题就会消失?

而且你也不必再回答100500个愚蠢的问题了!

如果有这样的问题,这不是学生的错,而是你的错!"。你没有在任何地方描述它!!。

帮助中没有写,没有写如何从int翻译成double。

但它说,如果你把双数类型赋给int,小数部分将被抹去。

一个正常人在逻辑上会得出这样的结论:如果int被赋值为double,只是一个带有给定数量的0的点将被添加......

所以它是这样的 ....

 
Roger:

替换


非常感谢您,我将尝试一下。
 
VOLDEMAR:

知道为什么吗?
也许我们应该制作足够的教程?
也许做充分的教学?


这些问题不适合我。我是一个用户,就像你一样。

也许你应该把这些东西写在某个地方。

好吧,我给你看了它说的地方。

也许那时问题就会消失。

不,他们不会消失。我向你保证。

而且你也不必再回答100500个愚蠢的问题了!
如果有这样的问题,这不是学生的错,而是你的错!"。你没有在任何地方描述它!!。

这些问题不适合我。我是一个用户,就像你一样。

帮助中没有写,没有写如何从int翻译成double。
但它说,如果你把双倍类型分配给int,那么小数部分将被抹去。

一个正常人在逻辑上会得到这样的想法:当你把一个int数分配给一个双数时,那么只需加上一个有一定数量的0的点就可以了......。


是的,分配是双向的。

只是你没有进一步纳入你的逻辑。

如果你想符合逻辑,你就不能同时做两件事。你应该先给双数分配一个数字,然后再除以另一个数字。但情况恰恰相反,你迟早会明白的。

 
VOLDEMAR:

你有什么想法吗?

也许我们应该制作足够的教科书?

也许做充分的教学?

也许把这些东西写在什么地方?

也许那时问题就会消失?

而且你也不必再回答100500个愚蠢的问题了!

如果有这样的问题,这不是学生的错,而是你的错!"。你没有在任何地方描述它!!。

帮助中没有写,没有写如何从int翻译成double。

但它说,如果你把双倍数类型分配给int,小数部分将被抹去。

一个正常人在逻辑上会得出这样的结论:如果int被赋值为double,只是一个带有给定数量的0的点将被添加......

所以它是这样的 ....

弗拉基米尔,你有权向你购买的终端的技术支持表达所有这些歇斯底里的想法。而在你使用免费终端的时候,你可以感谢那些自己想通了的爱好者,以及像你这样甚至不想花时间在网站上搜索材料,仍然在回答一百次的东西的闲人。没有人欠你什么。他们正试图靠自己的力量去做。如果你想让他们打扰你,那就雇一个教官,把他的脑袋搞乱。他将给你一个假人和一个围嘴。