如何让一个程序员对基于你的IDEA编写EA产生100%的兴趣 - 页 11

 

或者在这个EA中组织一个可调的获利设置。

以下是完整的代码。

 
//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
extern double lot=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int tiket=0;
//----
if (iVolume(NULL,0,0)==1){
    Print("WATR1="+iCustom( NULL, 0, "WATR", 0, 0) );
    Print("WATR2="+iCustom( NULL, 0, "WATR", 1, 0) );
    
    if (iCustom( NULL, 0, "WATR", 0, 2)<1000 && iCustom( NULL, 0, "WATR", 1, 1)<1000) {tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,iCustom( NULL, 0, "WATR", 1, 0),0,NULL,16384,0,Red);}
    if (iCustom( NULL, 0, "WATR", 1, 2)<1000 && iCustom( NULL, 0, "WATR", 0, 1)<1000) {tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3, iCustom( NULL, 0, "WATR", 0, 0),0,NULL,16384,0,Green);}
    CheckOrders();
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
}
void CheckOrders(){
int pos=0;
int total=OrdersTotal();
for (pos=0;pos<total;pos++) {
if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true){ 
if (OrderType()==OP_BUY && OrderStopLoss()<iCustom( NULL, 0, "WATR", 0, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 0, 1),OrderTakeProfit(),0,Green);
if (OrderType()==OP_SELL && OrderStopLoss()>iCustom( NULL, 0, "WATR", 1, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 1, 1),OrderTakeProfit(),0,Red);
                                                                                   }
                                                          }
                                      }
 
Ultramarin:

或者在这个EA中组织一个可调的获利设置。

以下是完整的代码。

你试过吗?
 
Registr:
Ultramarin

或者在这个EA中组织一个可调的获利设置。

以下是完整的代码。

你试过工作吗?
如果这就是完整的EA代码,那么,Registr 已经给了你最好的建议。
 

我现在可以补充几点意见

1.属于起始函数的return(0)运算符 至少应该在一个大括号下面重复。因为它只有在满足成交量为1的条件下才会被执行。

其余的时候,启动功能应该错误地关闭。

被调用的指标值<1000的2个条件可能是为了表明在条形图上没有一个缓冲区的值。

即一种交叉(指标颜色的变化及其与当前价格的相对位置)。

恐怕在这种情况下,它只对那些当前价格值大于1000的符号有效(例如,PDR)。

如果指标在当前条形图上只画一种颜色(该条形图上另一个缓冲区的值为0)。

否则,在几乎所有的货币对上,指标的当前值将总是小于1000,并且条件将在每个柱子上触发。

3.我建议采取以下新条的条件


int time;
 
int start
   {
      if (time!=Time[1])
         {
            // расчет индикатора и выполение действий с ордерами
            //-----
            //-----
            //-----
            //-----
            time=Time[1];
 
         }
       return(0);
   }



 
olyakish:

我现在可以补充几点意见

1.属于起始函数的return(0)运算符至少应该在一个大括号下面重复。因为现在只有在满足成交量为1的条件下才会被执行。

其余的时候,启动功能应该错误地关闭。

被调用的指标值<1000的2个条件可能是为了表明在条形图上没有一个缓冲区的值。

即一种交叉(指标颜色的变化及其与当前价格的相对位置)。

恐怕在这种情况下,它只对那些当前价格值大于1000的符号有效(例如,PDR)。

如果指标在当前条形图上只画一种颜色(该条形图上另一个缓冲区的值为0)。

否则,在几乎所有的货币对上,指标的当前值将总是小于1000,并且条件将在每个柱子上触发。

3.我建议采取以下新条的条件


你最好告诉他要按哪些键...:)
 

哦,还有一件事。

4.调用自定义指标 12次,至少是亵渎神明的行为 :)

在你的情况下,6次就够了(我算过这么多次)。

在我看来,你的EA的处理速度不会增加两倍,而是1.5倍。 这些行动只是(代码优化),不能与参数的优化相混淆


//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//|                                   обработал напильником olyakish |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
 
extern double lot=1;
extern string rem01="Профит в пунктах от текущей цены";
extern int TP=100;
 
int time;
double WATR[2,3];// первое измерение - индекс буфера; второе измерение - индекс бара 
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int tiket=0;
 
   if (Time[1]!=time)
      {
         WATR[0,0]=iCustom( NULL, 0, "WATR", 0, 0);
         WATR[1,0]=iCustom( NULL, 0, "WATR", 1, 0);
         WATR[0,1]=iCustom( NULL, 0, "WATR", 0, 1);
         WATR[1,1]=iCustom( NULL, 0, "WATR", 1, 1);
         WATR[0,2]=iCustom( NULL, 0, "WATR", 0, 2);
         WATR[1,2]=iCustom( NULL, 0, "WATR", 1, 2);         
         Print("WATR1=",WATR[0,0]);
         Print("WATR2=",WATR[1,0]);
    
         if (WATR[0,2]>0 && WATR[1,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3,WATR[0,0],Bid+TP*Point,NULL,16384,0,Green);
            }
         if (WATR[1,2]>0 && WATR[0,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,WATR[1,0],Ask-TP*Point,NULL,16384,0,Red);                           
            }
         CheckOrders();
         time=Time[1];
      }
   return(0);
  }
//+------------------------------------------------------------------+
void CheckOrders()
   {
      int pos=0;
      int total=OrdersTotal();
      for (pos=0;pos<total;pos++) 
         {
            if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
               { 
                  if (OrderType()==OP_BUY && OrderStopLoss()<WATR[0,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[0,1],OrderTakeProfit(),0,Green);}
                  if (OrderType()==OP_SELL && OrderStopLoss()>WATR[1,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[1,1],OrderTakeProfit(),0,Red);}
               }
         }
      return(0);  // на самом деле нужно просто return но так вроде писать нельзя ...
    }
//+------------------------------------------------------------------+

至少要像这样

检查



 
不幸的是,这并不奏效。
 

谁能解释一下

有两个完全相同的EA,其参数绝对相同

一个人在同一时间买入,另一个人在同一时间卖出

进入和退出的时刻是相同的

它们如何同时消失得干干净净?

 
Ultramarin:

它们如何能够干净地合并?

在传播方面。