任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 89

 
Omm:

如何确定期货的日间交易时间?

MarketInfo(Symbol(),MODE_STARTING)

MarketInfo(Symbol(),MODE_EXPIRATION)

返回零


哪位经纪人?

因此,首先,你应该向你的经纪人查询。

 
alexey1979621:
尊敬的论坛成员,如何在您的专家顾问中写出价格越过通道线的条件,例如,价格从上方越过通道线,交易被打开或关闭?请注意,我对这个交叉的时刻感兴趣。我很高兴能提供帮助。

double price0=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 0),Digits));- 你在第0条的线的价值。

double price1=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 1),Digits));- 你的线在第1条的价值。

而最简单的方法是确定零点柱的击穿时刻:如果(High[0]>price0 && High[1]<=price1){线已经向上突破},如果(Low[0]<price0 && Low[1]>=price1){线已经向下突破}。从突破的那一刻起,ifs将为 "真",直到当前柱子结束。你的通道行最好有OBJPROP_RAY==True 属性。

 
alexey1979621:
尊敬的论坛成员,如何在EA中为穿越通道线设置条件,例如,如果价格从上方穿越通道线,并开启或关闭交易?请注意,我对这个交叉的时刻感兴趣。我很高兴能提供帮助。

有几种方法。

如果问价>通道线,并且低点[1]<=通道线,则向上交叉。

如果买入价<通道线,且高点[1]>=通道线,则向下交叉。

你可以用第1期向MA查询

 
我怎样才能在软件中选择最后一个关闭的 订单,并从中获取信息?
 
谢谢您的帮助

.我一定是把问题说错了,我应该附上部分代码的。我站在正确的立场上。

正如
所建议的那样

artmedia70 表示,要关闭的十字路口如下。根据截图,它完成了交易。但我们需要在十字架的地方完成交易

空白的CheckForClose()
{
双重PriceHigh, PriceLow。
//----,只为新酒吧的第一笔交易而去。
如果(Volume[0]>1)返回。

PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);


for(int i=0;i<OrdersTotal();i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
如果(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) 继续。
//---- 检查订单类型
如果(OrderType()==OP_BUY)
{
如果(Low[1]<=PriceHigh && Ask>=PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
突破。
}
如果(OrderType()==OP_SELL)
{
如果(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
突破。
}
}
//----
}

 
 
webip:
如何在软件中选择最后一个关闭的 订单并从中获取信息?

你可以找到任何你喜欢的东西。
 
alexey1979621:
谢谢您的帮助

.我一定是把问题说错了,我应该附上部分代码的。我站在正确的立场上。

正如
所建议的那样

artmedia70 表示,要关闭的十字路口如下。根据截图,该交易正在结束。但我们需要在十字架的地方完成交易

空白的CheckForClose()
{
双重PriceHigh, PriceLow。
//----,只为新酒吧的第一笔交易而去。
如果(Volume[0]>1)返回。

PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0)。


for(int i=0;i<OrdersTotal();i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
如果(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) 继续。
//---- 检查订单类型
如果(OrderType()==OP_BUY)
{
如果(Low[1]<=PriceHigh && Ask>=PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
突破。
}
如果(OrderType()==OP_SELL)
{
如果(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
突破。
}
}
//----
}

极端TMA--逆天的透支。这是一大段历史--过去的30个小节,如果不是更多的话。我用它写了一个专家顾问 - 它很糟糕。想象一下:一个信号出现了,你输入了它,一段时间后,这个信号不再出现在历史上--指标被重新绘制了,结果你白白地进入市场。

你在确定交叉点时犯了一个错误:如果(Low[1]<=PriceHigh && Ask>=PriceHigh ) ...你应该写 if(Low[1]<=PriceHigh && Ask>PriceHigh ) ...而对于反面的类比。

在你的信息输入窗口顶部的面板上插入带有SRC 按钮的代码。

ZZZY 那么,带有十字架的截图在哪里?

 
artmedia70:

ExtremeTMA - 他们是不折不扣的透支。还有一大段历史--过去的30条,甚至更多。我用它写了一个专家顾问 - 它很糟糕。想象一下:我得到了一个信号,输入了它,一段时间后,信号在历史上不存在了--指标做了太多的重绘,结果是我白白地进入了市场。

你在确定交叉点时犯了一个错误:如果(Low[1]<=PriceHigh && Ask>=PriceHigh ) ...你应该写 if(Low[1]<=PriceHigh && Ask>PriceHigh ) ...而对于反面的类比。

SZY 应该按文本输入窗口顶部面板上的SRC 按钮来粘贴代码。


已更正,关闭交易的方式与上面的截图相同,应该是红叉的位置。

我同意ExtremeTMA重绘,但我想这并不影响寻找入口点,这里主要是过滤器。我使用了TDI指标。我附上了我做的东西(我的手艺不好,所以这个 EA要好好处理)。我只有一个问题,在测试器中,1年大约需要5个小时(我在某个地方犯了一个错误)。如果寻找错误并不困难。

extern double  Lots             = 0.1;
extern string Сomment           = "TMA Canal2";
extern int TakeProfit           = 20;     //тейкпрофит (отрицательное число или ноль чтобы не использовать);
extern int StopLoss             = 20;     // уровень Stop Loss для покупки;
extern int Slippage             = 2; // проскальзывание 
extern int Magic                = 124;

extern string  Indi             = "ExtremeTMALine";
extern string TimeFrame         = "current time frame";
extern int    HalfLength        = 56;
extern int    Price             = PRICE_CLOSE;
extern double ATRMultiplier     = 2.0;
extern int    ATRPeriod         = 100;
extern bool   Interpolate       = true;
extern double TrendThreshold    = 0.5;
extern bool   Distances         = false;


extern string  Indicatora       = "TradersDynamicIndex";
extern int RSI_Period           = 13;         //8-25
extern int RSI_Price            = MODE_CLOSE;           //0-6
extern int Volatility_Band      = 34;    //20-40
extern int RSI_Price_Line       = 2;      
extern int RSI_Price_Type       = MODE_SMA;      //0-3
extern int Trade_Signal_Line    = 7;   
extern int Trade_Signal_Type    = MODE_SMA;   //0-3
extern bool UseAlerts           = false;

double PriceHigh, PriceLow, SL, TP, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
int ticket;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
      if (Digits ==3 || Digits ==3) // для пятизначного брокера
         {
            TakeProfit *= 10;
            StopLoss *= 10;
            Slippage *= 10;
         }
      return(0);
}


//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
   
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double PriceHigh, PriceLow, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
   int ticket;

//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
   
   PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
   PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);
   TDIHigh = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 1, 0); // голубая
   TDILow = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 3, 0); // голубая 
   RSIPriceLine = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 4, 0); // зеленая
   TradeSignalLine = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 5, 0); // красная
   
   
   if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh || Ask>=PriceHigh && TDIHigh > 68 && RSIPriceLine < TradeSignalLine)  

     {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"TMA Canal2",124,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow || Bid<=PriceLow && TDILow < 32 && RSIPriceLine > TradeSignalLine)  

     {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"TMA Canal2",124,0,Blue);
      return;
     }
//----
  }

  //+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double PriceHigh, PriceLow;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
 
   PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0); 
   PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0); 
   
   
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Low[1]<=PriceHigh && Ask>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(High[1]>=PriceLow && Bid<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }

//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
   {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
 
alexey1979621:

纠正了,关闭交易的方式与上面的截图相同,但红叉的位置应该是。

我同意ExtremeTMA是过度的,但我想这并不影响寻找进入点,这里主要的是过滤器。我使用了TDI指标。我附上了提示(我的手不直,专家顾问项目就像我的手)。我只有一个问题,在测试器中,1年大约需要5个小时(我在某个地方犯了一个错误)。如果寻找错误并不困难。

还没有找过错误--有很多事情要做。

为了关闭红叉所在的Sell,你需要在当前条形图上检查。如果Ask<=close level &&High[1]>close level