[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 621

 
是的。
 
Roger:
是的。
:)现在出现了错误130。最奇怪的是,在错误的止损点(130)下,它仍然设置了正确的takei(由ATR计算),但我的止损点从一开始就没有设置...。
有什么办法可以理解它吗?
 
b0r1s:

需要帮助!!!如何从历史记录中选择最后的失败订单?


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг убыточности последней позиции.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderProfit()<0) return(True);
  }
  return(False);
}

if (isLossLastPos(NULL, -1, Magic искомого ордера)) {нашли - обрабатываем...}
 
ToLik_SRGV:

这对你来说有点太复杂了 :))
以下是我的代码

将方法作为参数传入一个延迟的medjack和理想的trall。

我不明白为什么你的函数给出了错误1(有趣的是:错误1=没有错误,但结果未知),而没有拖动。有时它可能会捕捉到一些悬而未决的错误,但大多数时候,>>ERROR1在日志中,不要咳嗽。

我是这样做的。

//==============================================================================================
   // Модификация ордеров
//============================================================================================== 
   int criterion = TakeProfitATR (1);                // Рассчитываем "достаточную" волатильность
   if (criterion>=15) trailingOrder(511, 20);        // и если она в "норме" - тралим ордера...
//==============================================================================================

// Функция для рассчёта Take Profit по ATR

//+------------------------------------------------------------------+
//|                  Take from ATR                                   |
//+------------------------------------------------------------------+
double TakeProfitATR (int tf)
  {
   double   atr   =iATR(NULL,tf,14,0);
   double   mltp  =15000;
   if (tf==1) mltp=15000;
   if (tf==5) mltp=45000;
   double   tp    =MathRound(atr*mltp);
   return  (tp);
  }
 
artmedia70:

我不明白为什么你的函数给出了错误1(有趣的是:错误1=没有错误,但结果未知),而没有拖动。有时它会捕捉到一些悬而未决的错误,但大多数情况下它会在日志中显示>>ERROR1,并且不咳嗽......

我这样称呼它。


错误1可能因为这个原因出现(来自OrderModify()文档)。

如果未改变的值作为函数参数被传递,那么将产生错误1(ERR_NO_RESULT)。

所以没关系,真的没有错误,你可以忽略它。
 
artmedia70:

我不明白为什么你的函数给出了错误1(有趣的是:错误1=没有错误,但结果未知),而没有拖动。有时它可能会捕捉到一些悬而未决的错误,但大多数时候,>>ERROR1在日志中,不要咳嗽。

我是这样做的。


我添加了Limit`order(在最后的代码中,我忘记了它们:))+错误#1的处理(在修改前,新价格与当前价格进行比较,如果它们相同,则不做任何处理)。

//+------------------------------------------------------------------+
void trailingOrder(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLSTOP){
            if(Bid - OrderOpenPrice() > Point*trailing){
               if(Bid - (Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Bid - (Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLLIMIT){
            if(OrderOpenPrice() - Bid > Point*trailing){
               if((Bid+Point*trailing) - Bid >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Bid+Point*trailing) - Bid > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_BUYLIMIT){
            if(Ask - OrderOpenPrice() > Point*trailing){
               if(Ask - (Ask-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Ask - (Ask-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
 

顺便说一下,我在教程中发现了一个关于吊坠的StopLevel和FreezeLevel距离的错误。

对最小StopLevel距离的限制。

如果违反了这些要求中的任何一条,交易操作 就不会被执行。

订单类型 订单的开盘价(OpenPrice)。 止损(SL) 获取利润(TP)。
购买
不允许修改出价-SL 停止水平TP-Bid ≥ StopLevel
出售
不允许修改SL-Ask StopLevel问-TP StopLevel
买入限价
询问-公开价格 停止水平OpenPrice-SL StopLevelTP-OpenPrice ≥ StopLevel
卖出限价
买入价-开盘价≥止损价SL-OpenPrice≥StopLevelOpenPrice-TP StopLevel
购货站
开价-询问 停止水平OpenPrie-SL StopLevelTP-OpenPrice StopLevel
卖点
买入价-开盘价 止损价SL-OpenPrice StopLevelOpenPrice-TP StopLevel

SellLimit被设置在当前价格之上,所以这是对的。

开盘价-出价≥止损价

 
我如何打开两个相距50点的对立轨道?
 

有没有办法对屏幕底部的标签中的工具进行分类?因为4个时间段的8个工具分散在一个混乱的....。

 
Rossi:

有没有办法对屏幕底部的标签中的工具进行分类?因为4个时间段的8个工具分散在一个混乱的....。


抓住带有图表名称的标签,将其拖到正确的位置。
原因: