[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 180

 
solnce600:

祝大家今天愉快

我是一个新手。这是我第一次尝试在测试器中把一个想法变成代码。

这个想法很简单--在每个小时的蜡烛图的开盘价开一个订单,交替地向上和向下。

我已经写了一个简单的代码....但问题是,程序有时会在一个蜡烛图开盘时开出1个以上的订单。

在我看来,当1秒内出现1个以上的刻度时就会发生这种情况。

作为一个替代方案,我试着把if( ) 条件的标头放进去。

订单总数()==0

只有一个订单真正打开。



但这个变体不适合我,因为第二天所给的烛台没有打开,因为在这个烛台打开的时刻

交易中已经有了随机数量的订单。

我还尝试中断OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP);用return中断start()的执行;.....并没有帮助。


如果您能告诉我如何在任何一个点上只做1个订单,并在1秒内打开,我将非常感激。

int start()

{
double Price=Ask;
double SL=Price-300*Point;
双重TP=价格+300*点。
if( Hour()==10 && Minute()==00 && Seconds()==00)
OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP)。
}

试试这个变体。
int TimeNow, TimePrev, PrevType;

int start()   
 {
  double Price,SL,TP;
     int Ticket;

  TimeNow=iTime(NULL,0,0);
  if(TimePrev==TimeNow) return(0);

  if(PrevType!=1) {
   Price=NormalizeDouble(Ask,Digits);    
   SL=NormalizeDouble(Price-300*Point,Digits);    
   TP=NormalizeDouble(Price+300*Point,Digits);
   Ticket=OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP);
   if(Ticket!=-1) { TimePrev=TimeNow; PrevType=1; } }

  else if(PrevType!=-1) {
   Price=NormalizeDouble(Bid,Digits);    
   SL=NormalizeDouble(Price+300*Point,Digits);    
   TP=NormalizeDouble(Price-300*Point,Digits);
   Ticket=OrderSend(Symbol(),OP_SELL,0.1,Price,3,SL,TP);
   if(Ticket!=-1) { TimePrev=TimeNow; PrevType=-1; } }
 }
 
alsu:


非常感谢您的及时回复。
 
Diubakin:
试试这个选项。
非常感谢您的及时回复。
 
亲爱的专业人员!我在哪里可以找到能在手动模式下工作的SloseBy()函数?我想把它添加到我的猫头鹰中,这样我就可以 最大负值的头寸关闭 到最大正值的头寸 中,不是手动,而是根据条件自动关闭。我在代码库中找不到它。我在代码库中没有找到它,谢谢你!"。
 
borilunad:
熟练工!"。我在哪里可以找到СloseBy()函数,它在手动模式下工作?我想把它添加到我的猫头鹰中,这样就不可能把最大负值的头寸关闭到最大正值的相反位置,而是根据条件自动关闭。我在代码库中找不到它。我在代码库中没有找到它,谢谢你!"。

试试这个选项。

bool LockOFF(int EA_Magic) {
 double Result, PrevLoss, PrevProfit;
    int pos, orders_total, order_type, MaxProfitTicket, MaxLossTicket;
   bool Ans;

 MaxProfitTicket=-1; MaxLossTicket=-1;

 orders_total=OrdersTotal();
 for(pos=orders_total-1; pos>=0; pos--) {
  if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордер
  if(OrderType()>1) continue;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
  if(Result<0.0 && (PrevLoss==0.0 || Result<PrevLoss)) {
   PrevLoss=Result; MaxLossTicket=OrderTicket(); order_type=OrderType(); } } // end of for

 if(MaxLossTicket==-1) return(false); // нет убыточной позиции
 if(order_type==OP_BUY) order_type=OP_SELL; else order_type=OP_BUY; 

 orders_total=OrdersTotal();
 for(pos=orders_total-1; pos>=0; pos--) {
  if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордер
  if(order_type!=OrderType()) continue;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
  if(Result>0.0 && (PrevProfit==0.0 || Result>PrevProfit)) {
   PrevProfit=Result; MaxProfitTicket=OrderTicket(); } } // end of for

 if(MaxProfitTicket==-1) return(false); // нет противоположной прибыльной позиции

 Ans=OrderCloseBy(MaxLossTicket, MaxProfitTicket);
 if(!Ans) { Print("Ошибка при встречном закрытие"); return(false); }
 
 return(true); }
 

谢尔盖,粗略地看了一下,它是值得的!我把它拧上,创造条件,然后试试。非常感谢您!

试了一下,工作起来没有错误!现在只需试验一下条件,得到的效果,就会好起来的!"。但这是为明天准备的!

非常感谢你。还有有趣的梦!

 
borilunad:
谢尔盖,粗略地看了一下,它是值得的!我把它拧上,创造条件,然后试试。非常感谢您!
只不过不是反关闭命令,而是插入一个完整的反关闭功能--否则就只是为测试者服务。并初始化函数中的变量。
 
artmedia70:
只不过不是反关闭命令,而是插入一个完整的反关闭功能--否则就只是为测试者服务。并初始化函数中的变量。
谢谢Artyom,太晚了。我今天会按照网上的规则来做所有的事情!
 
borilunad:
谢谢你,阿尔乔姆!太晚了。今天将按照网上的规则做一切事情!
好运...
 

下午好。我有这样一个问题。

从其他专家顾问和感应器的代码碎片中艰难地重新设计了这个指标 以满足自己的需要。这不是一个大的代码,它以我想要的方式工作。

问题是,它在内部进行一些计算,并在图表上显示出向上或向下的箭头。

请告知如何使专家顾问在图表上出现箭头时按正确的方向开立订单。

更确切地说,我只需要知道现在哪个箭头是活动的,我想我可以做其他的事情。

这里有一段代码可以让它更清晰,它是指标中的一个初始化部分

   SetIndexBuffer(1, Vverh);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,233);

   

   SetIndexBuffer(2,Vniz);

   SetIndexStyle(2,DRAW_ARROW);

   SetIndexArrow(2,234); 

预先感谢