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

 
哪些国家)请写下这些旗帜是什么。在搜索引擎中输入的键是什么,并阅读它们。
 
如果你指的是假真,我不明白你怎么能一次只开一个订单。
 
你能告诉我EA是如何打开一个订单网格的吗?我写了一个函数,可以检测出价格最高和最低的订单。但我还需要关于价格最低或最高的第二个订单的信息。
 
Top2n:
如果你指的是假的真实,那么我不明白怎么可能正好开一个订单。
为什么不检查 "是否已经有一个应该由信号打开的类型的未平仓头寸
如果它已经存在,那么就不要打开它。

如果市场上没有这种类型的仓位,那就开仓吧。

那么,在进行这项检查的同时,你也可以检查任何其他条件。例如:如果已经有了这样的仓位,但在开仓后已经过了一定的时间,可以再开仓......等等...等等...

 
DimaMA:
你能告诉我EA是如何打开一个订单网格的吗?我写了一个函数,可以确定价格最高和最低的订单。但我需要更多关于价格最低或最高的第二个订单的信息。这里一般是第二个,而不是最后一个。告诉我这个功能。

循环浏览所有的订单,并将它们存储在一个二维数组中。在数组的第一个维度中,记录订单被设置的时间,在第二个维度中,记录其票据。按照放置日期的顺序(按第一个维度)对数组进行降序排序。数组 中第一维的第二个元素 将包含倒数第二个订单的安装日期(从头到尾的第二个),第二维将包含必要订单的票据。你通过这张票选择订单,并...你可以用它做任何你想做的事。


有一次,我写了一个函数,用于计算一个自定义EA的N个最后头寸的盈亏平衡。应从倒数第二位开始,对最后几个位置进行计算。你可以看看它是如何实施的,并从中得到一些东西。

//+----------------------------------------------------------------------------+
// Уровень безубытка по символу для N последних позиций, начиная с предпоследней
double LevelPreWLforNpos(int op, int mn1, int mn2, int num) { 
   double lots=0;
   double sum=0;
   int n=0;
   int mass[1][2];
   ArrayInitialize(mass,0);
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)  continue;
         if (OrderType()!=op)    continue;
         if (OrderMagicNumber()==mn1 || (OrderMagicNumber()==mn2 || OrderMagicNumber()<0)) {
            n++;
            if (n>ArrayRange(mass,0)) ArrayResize(mass, n);
            mass[n-1][0]=OrderOpenTime();
            mass[n-1][1]=OrderTicket();
            }
         }
      }
   ArraySort(mass,WHOLE_ARRAY,0,MODE_DESCEND);
   if (ArrayRange(mass,0)>num+1)  ArrayResize(mass,num+1);
   for (i=1; i<ArrayRange(mass,0); i++) {
      if (OrderSelect(mass[i][1],SELECT_BY_TICKET)) {
         if (OrderCloseTime()==0) {
            if (OrderType()==OP_BUY) {
               lots+=OrderLots();
               sum+=OrderLots()*OrderOpenPrice();
               }
            if (OrderType()==OP_SELL) {
               lots-=OrderLots();
               sum-=OrderLots()*OrderOpenPrice();
               }
            }
         }
      }   
   double price=0;
   if (lots!=0) price=sum/lots;  
   return(NormalizeDouble(price,dg));
}
//+----------------------------------------------------------------------------+
 
Top2n:
如果你指的是假真,我不明白你怎么能一次只开一个订单。


是的,这就是我的意思。请看这里的教程。 你会有更多的条件,就像你写的:"注意问题!)以及如何使它为(sig1)打开一次,它可能是这样sig1-打开BAY,下一个命令,sig0-admit包含。 trall(不重要),下一个命令再次,sig1-打开第二个BAY。" - 是不是有很多时候?似乎你不需要它......。一般来说,玩的是旗子。

 
Roman.:


是的,我是说他们。请看这里的教程。 你会有更多的条件,正如你写的:"注意问题!)以及如何使它为(sig1)打开一次,而它可能是这样的sig1-打开海湾,下一个命令,sig0-允许上。拖网(这并不重要),下一个命令再次,sig1-打开第二个海湾" - 是不是很多次?似乎你不需要它......。一般来说,玩的是旗子。

基米是否有合适的功能,任何机会?以免使程序变得杂乱无章。他有必要打开命令,冷静下来,但 "一千 "在一秒钟。
 
Top2n:
Kim I.V.恰好有一个合适的功能吗?以免使程序变得杂乱无章。我希望他能打开一个订单,然后放松,因为他在一秒钟内 "打开了一千个"
请您选择。
 

我想在测试后将测试结果(事务)写入一个文件中

我把tofile()函数放在deinit()块中(它在工作完成后写入)。

但该函数本身

// Запись профитов в файл
void toFile( )
{
int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
  if(handle<0) return(0);
  // запишем заголовок в файл
  FileWrite(handle,"#","проф");
 
  int total=OrdersTotal();
  // записываем в файл только закрытые ордера
  for(int pos=0;pos<total-1;pos++)
    {
     //FileSeek(handle, 0, SEEK_END);
     if(OrderSelect(pos,SELECT_BY_POS, MODE_HISTORY)==false) continue;
     FileWrite(handle,OrderTicket(),OrderProfit());
    }
  FileClose(handle);
  return;
不起作用,它只记录标题
 
那么你能告诉我哪个函数返回当前价格 吗?