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

 
tara:
两个怎么样?
然后按字母顺序排列名字。
 
     // Проверяем все открытые ордера---------------------------------------------------------------------------

    for(n=0,i=0;i<OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()<MAGIC+1 || OrderMagicNumber()>MAGIC+3) continue;
      no=OrderMagicNumber()-MAGIC;
      
      if(no==1)
      {
         n++;
         if(OrderType()==OP_SELL) { if(OrderOpenTime()>=ltts && BSo1==OP_SELL) s1=true; 
         if(MathAbs((OrderOpenPrice()-NormalizeDouble(Bid,Digits))/Point)<Add){OS1=1;} // Запрет на открытие селл

            } else
         if(OrderType()==OP_BUY) { if(OrderOpenTime()>=lttb && BSo==OP_BUY) b1=true;
         if(MathAbs(OrderOpenPrice()-NormalizeDouble(Ask,Digits))/Point<Add){OB1=1;} // Запрет на открытие бай
         }     
      }
   }
下午好。
任务是在已经开出的订单的一定距离内 "添加 "一个订单。
单独的买入和卖出订单得到控制。
我写了这段代码。它似乎在工作,但有时价格覆盖了比 "添加 "更长的距离,但订单却没有打开。
我已经试过打印,但 "添加 "条件不能正常工作,我不知道哪里出了问题。
也许有人会告诉我该怎么做?
 

亲爱的先生们,我一直困惑于一个与重新报价 有关的问题的解决方案。

情况:专家顾问从市场上开出的订单,有硬性止损,并以点为单位进行接管,在一个封闭的酒吧里工作,M15。收到开单信号后,专家顾问多次尝试开单,但都失败了。在下一个条形图中,信号重复出现,专家顾问开始交易,但汇率已经离开了发出第一个信号的点。事实证明,止损将从交易开启的速率来设定,而不是从第一个开启信号的速率来设定。我写了这样一个结构,在设置止损和止盈时,专家顾问将采取收到第一个信号的价格。

  if(sg==1 && TimeCurrent()-buy_time>=1800) {buy_price=Ask;buy_time=TimeCurrent();}//
  if(sg==-1 && TimeCurrent()-sell_time>=1800) {sell_price=Bid;sell_time=TimeCurrent();}//
где,
sg==1 сигнал на покупку
sg==-1 сигнал на продажу
buy_time - переменная в которую запоминаем время поступления сигнала на покупку
sell_time - переменная в которую запоминаем время поступления сигнала на продажу

при выставлении ордера стоп и тейк прибавляем/вычитаем не от текущей цены а от buy_price и sell_price

我想解释一下我为什么要使用第一个信号:止损和取舍的大小是在测试器中选择的,算是最佳的,如果我们从第二个信号中设置止损/取舍,它们将不是最佳的,因为实际打开率与第一个信号的打开率不同。

 
evillive:

交易拖网订单总数-1,也就是说,我们永远不会到达最古老的那一个。其次,它的拖网订单从最新的到最旧的,较旧的订单可能在拖网船到达之前就已经使用停止或采取的方式关闭了。一般来说,什么东西不工作,你有错误记录吗?


TS根本不工作,有几次我注意到,"按照设计",它根本没有关闭位置。没有错误日志,但我如何得到它们?

至于平仓单,请您写出更多的细节,因为该EA是多货币的,但每次对一种货币的交易限制是1次。

 
Stells:
下午好。
任务是在已经开出的订单的一定距离内 "添加 "一个订单。
单独的买入和卖出订单得到控制。
我写了这段代码。它似乎在工作,但有时价格覆盖了比 "添加 "更长的距离,但订单却没有打开。
我已经尝试过打印机,但 "添加 "条件不能正常工作,我不知道哪里出了问题。
也许有人会告诉我该怎么做?


伊戈尔-金的特点,简单而方便。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |7
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Sancho77:

亲爱的先生们,我一直困惑于一个与重新报价有关的问题的解决方案。

情况:专家顾问从市场上开出的订单,有硬性止损,并以点为单位进行接管,在一个封闭的酒吧里工作,M15。收到开单信号后,专家顾问多次尝试开单,但都失败了。在下一个条形图中,信号重复出现,专家顾问开始交易,但汇率已经离开了发出第一个信号的点。事实证明,止损将从交易开启的速率来设定,而不是从第一个开启信号的速率来设定。我写了这样一个结构,在设置止损和止盈时,专家顾问将采取收到第一个信号的价格。

我想解释一下为什么我想使用第一个信号:止损和止盈的大小是在测试器中选择的,算是最佳的,如果你从第二个信号中设置止损/止盈,结果会发现它们不是最佳的,因为实际交易开仓的速度与第一个信号的速度不同。

事实证明,最优性 由tp和sl水平决定,而交易价格 可以是任何?这似乎并不符合逻辑。
 
alsu:
事实证明,最优性 由tp和sl水平决定,而交易价格可能是任何?这似乎不符合逻辑。

优化不仅是由止损决定的,主要是由开仓交易的信号参数决定的,我没有给出这些信号,以免我的问题过多,信号参数其实与问题无关。如果打开交易的信号被保存,交易价格 可能是任何。

如果您能就我的问题的实质发表意见,即计算止损点的代码是否写得正确,我将不胜感激。

 
Sancho77:

我手头没有代码,但我为自己做了类似的事情,但不是这样的:我记住了有信号的那根柱子的时间,当使用这个信号下单时,我把信号时间重置为零,如此反复。

datetime buy_time,sell_time;
int init(){
   buy_time = 0;
   sell_time = 0;
}
int start(){
   if(buy_time==0 && Open[1]>Close[2]) buy_time = TimeCurrent();
   .......
   if(buy_time!=0){
      OrderSend(.........);
      buy_time = 0;
   }
return(0);
}
好吧,如果问题是关于只打击重新报价,那么请看Igor Kim的主题,几乎所有下单的功能都有一个参数,用于尝试下单的次数。
 
Sancho77:

优化不仅是由止损决定的,主要是由开仓交易的信号参数决定的,我没有给出这些信号,以免我的问题过多,信号参数事实上与问题无关。如果打开交易的信号被保存,交易价格可能是任何。

如果您对我的问题的实质发表意见,我将不胜感激,也就是说,计算水平的代码是否正确地计算了停止和采取?

是的,它写得很正确,但试想一下这种情况。例如,交易的"真实"价格 变成了高于记忆中的TP--那么你会怎么做?(而这种情况是相当真实的--重新报价在快速市场中只是频繁发生,当价格跳动时)
 
alsu:
写作是正确的,但想象一下这种情况。例如,交易的 "真实 "价格变成了高于记忆中的TP--那么你会怎么做?(而这种情况是很真实的--重新报价在快速市场上就是很频繁的,当价格跳动时)

谢谢你的意见。

如果价格最终高于记忆中的TP,那么交易将以最低的取款水平开仓,这样的处理方式是EA固有的。

PS 顺便说一下,如果新的价格与记忆中的价格相差超过一定距离,我将不得不尝试设置开仓 禁令,谢谢你的想法,我希望能在测试器中检查,只能在交易中检查。