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

 
Forexman77:


你好!

对不起,我提出了一个相对较老的话题。我已经理解了代码中的一切。

现在我有一个难题,如何打开一个交易。例如,就在一个给定的范围之后,我们要找的是

价格比最高价低了一定的点数。我们打开了一个交易。

我曾试图添加这样的代码并在测试器中运行,但它没有打开交易。

该怎么做?

这应该是可行的,我还没有亲自测试,因为到目前为止,终端正忙于优化另一个EA。

#define magic 123456789
extern int StartHour=16;
extern int StartMinute=1;
extern int StopHour=17;
extern int StopMinute=59;
bool Flag=true; // Флаг разрешения открытия позиции, чтобы не плодить бесконечное число ордеров
double lots=0.1;// размер лота
double sl=100;  // стоплосс в пунктах
double tp=100;  // тейкпрофит в пунктах
int ticket=-1;
int OldBar;
int init() {
 sl=NormalizeDouble(sl*Point,Digits);//стоплосс в поинтах
 tp=NormalizeDouble(tp*Point,Digits);//тейкпрофит в поинтах
 return(0);}
int deinit() {return(0);}
int start(){
 static double Maximum=-1;
 int StartTime=StartHour*60+StartMinute;
 int StopTime=StopHour*60+StopMinute;
 if(StopTime<=StartTime) {Print("ERROR: Неправильные времена"); return(0);}
 int CurrentMinutesFromDayStart=Hour()*60+Minute();// Текущее время в минутах от начала дня
 datetime td=iTime(Symbol(),PERIOD_D1,0);// Время открытия дневного бара в секундах от 01.01.1970
 if(CurrentMinutesFromDayStart<StartTime) {Maximum=-1;Flag=true;}// Если StartTime еще не настало, то после StopTime нужно пересчитать Maximum и можно открывать ордер
// В 22:55 Принудительно закрываем ордер
 if(CurrentMinutesFromDayStart>22*60+55 && ticket>=0) if(OrderSelect(ticket,SELECT_BY_TICKET)) if(OrderCloseTime()==0) if(OrderClose(ticket,OrderLots(),Ask,30,Magenta)) ticket=-1;
 if(CurrentMinutesFromDayStart>StopTime && Maximum<0) {// если максимум ещё не посчитан
  datetime ts=td+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
  int start= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
  ts=td+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
  int count= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
  count=start-count;// Сколко баров длится временной интервал
  Maximum=iHigh(Symbol(),PERIOD_M1,iHighest(Symbol(),PERIOD_M1,MODE_HIGH,count,start));//Находим максимум на заданном временном интервале
 }
 if(Maximum>0 && Flag) {
  double signal = Maximum - Bid;
  if (signal-12*Point>0.0) { // к примеру если ниже максимума на 12 пунктов, в этом случае откроем SELL                                       
   ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,Ask+sl,Ask-tp,"My order",magic,0,Blue);
   if(ticket>=0) Flag=false;// Ордер открылся, сегодня больше не открываем.         
  }
 }
 return(0);
}
 
Sepulca:

这应该是可行的,我还没有亲自测试,因为终端正忙于优化另一个EA。

谢谢你!
 
Sepulca:

这应该是可行的,我还没有亲自测试,因为终端正忙于优化另一个EA。


// В 22:55 Принудительно закрываем ордер
 if(CurrentMinutesFromDayStart>22*60+55 && ticket>=0) if(OrderSelect(ticket,SELECT_BY_TICKET)) if(OrderCloseTime()==0) if(OrderClose(ticket,OrderLots(),Ask,
   30,Magenta)) ticket=-1;
我可以删除这一行吗,还是没有这一行就不能工作?我不明白为什么我必须要关闭订单?
 
Forexman77:

这条线能不能去掉,或者没有这条线就不能工作?我不明白为什么我必须关闭一个订单?

当然你可以删除它,这只是为了测试,而不是为了增加未结订单的数量。这只是一个EA的 培训例子。它每天开启的卖出订单不超过一个。而在你的EA中,你应该自己决定如何关闭订单:通过止损、止盈或其他条件。选择22:55这个时间,是因为许多经纪公司大幅提高了点差,尤其是在周五晚上11点以后。你可能认为我们应该每天开一个以上的订单。而这是一个放在一边的订单的例子。我们应该通过类比来寻找最低限度。这段代码作为一个例子,我希望它能促进我创建自己的EA)
 

你好!

我是个傻瓜,但我想自己改变代码中的一些东西...

任何建议,如果你不介意你的时间...

我有几个问题。

1.我如何在我的EA中添加一个可变的 "止损"? 当然,我希望能够改变它。

2.如何让我的EA为我的每笔交易添加评论?

3.我如何在我的EA中添加一个神奇的号码?

 
K-o-t:

你好!

我是个笨蛋,但我想自己改变代码中的一些东西...

任何建议,如果你不介意你的时间...

我有几个问题。

1.我如何在我的EA中添加一个可变的 "止损"? 当然,我希望能够改变它。

2.如何让我的EA为我的每笔交易添加评论?

3.如何用一个神奇的数字添加一个EA?

1.外部双倍StopLoss=100.0;//添加止损变量

2-3. int ticket=OrderSend(Symbol, TypeOfOrder,LotsOfOrder,OpenPriceOfOrder,Slippage,OpenPriceOfOrder+/-StopLoss,OpenPriceOfOrder-/+TakeProfit, YourMagicNumber,0, CLR_NONE) ;

4.阅读!

 
artmedia70:

这里是接头处。

 for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют.. 
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
      if (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0); // ЗДЕСЬ ВЫХОДИМ ПРИ ПЕРВОМ ВСТРЕЧНОМ
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
事实上,是的,我今天早上重新看了一下。事实证明,第一笔订单,它的利润比要求的多,给出了一个信号,继续功能(即不被错过),然后,当然,一切都将是错误的。
 

下午好!

你能告诉我如何设置专家顾问的优化,使其也能显示负数的通过结果吗?

 
filpan:

下午好!

你能告诉我如何设置专家顾问的优化,使其也能显示负数的通过结果吗?

在有优化结果 的标签中,右键单击任何结果,取消勾选 "不显示无用的结果"(或类似的东西)。
 
找到了,谢谢!