[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 317

 
enya:

.

在插入的。 循环的问题和退出循环后恢复初始值

这里有一个函数,可以回答最后一笔交易是盈利还是不盈利。

 double LastOrderProfit()
 {
   double Profit=0;
   int ticket; 
   for(int i=0; i<OrdersHistoryTotal(); i++){
     if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
     if(OrderMagicNumber()!=Magic)continue;
     if(OrderType()>1)continue;
     if(ticket<OrderTicket()){
        ticket=OrderTicket();
        Profit=OrderProfit()+OrderSwap()+OrderCommission();
     } 
   }     
 return(Profit);
 } 

然后,通过将其答案与零进行比较,你决定是保持TP/SL不变还是改变它们。

 if(LastOrderProfit()>0) newTPSL=false; else  newTPSL=true;
if(newTPSL)OrderModify(.......newSL,newTP...);
 

大家好。我对IN10TION NewsReader指标感兴趣。我想把它附在我的EA上。

如果出现红线(Market.TdOpen)和Market.Price.DOWN(red),则卖出

如果出现红线(Market.TdOpen)和Market.Price.UP(绿色),则买入

我可以采取什么行动? 我已经试过了iCustom,但它不起作用!为什么?


extern bool Market.TdOpen = TRUE;
extern color Market.TdOpen.Color = Red;
extern bool Market.TdFibo = TRUE;
extern color Market.TdFibo.Color = C'0x00,0x32,0x00';
extern color Market.Price.UP = Lime;
extern color Market.Price.DOWN = Red;
extern bool Market.Price.Guide = TRUE;

附属文件
_yIN10TIONfNewsReaderov09.99kblite.ex4(115.59 KB) 删除

 

为自己的重复行为向管理员道歉,但还没有人对我说半个字。这个想法是为了输出存储在日志中的信息,即那些不能被IsConnected()函数正确修复的信息--连接失败、重新请求。否则就不清楚为什么EA目前没有任何行动。


请建议使用下面的代码来读取日志文件。按日期自动读取当前的日志文件并输出到打印机。

在哪里?

while (result>0) {

一个文件正在由零件组装而成。但我不需要整个文件,只需要最后一行。请帮助纠正它。

void ReadWrite() {
   string tekTime=TimeStr1(CurTime(),1);
   string path=TerminalPath()+"\\logs\\"+tekTime+".log";
   string title="Чтение из файла";
   string msg;
   int result;
   int handle=_lopen(path,4);
   if (handle<0) {
      msg="Ошибка открытия файла";
      Print(msg);
      return;
   }
   result=_llseek (handle,0,0);
   string buffer="";
   //string char="x                      ";
   string char="x                                                                                                                                                                                                                                                         ";
   int count=0;
   result=_lread (handle,char,250);
   while (result>0) {
      buffer=buffer+char;
      char="x                                                                                                                                                                                                                                                         ";
      count++;
      result=_lread (handle,char,250);
   }
   result=_lclose (handle);
   msg=StringTrimRight(buffer);
   Print(msg);
}

//------------------расчет времени----------------
string TimeStr1(int taim,int tip)
{
   string sTaim;
   string sTaim1,sTaim2,sTaim3;
   if (tip==1) 
   {
      int GD=TimeYear(taim);                  
      int MN=TimeMonth(taim);                  
      int DD=TimeDay(taim);  
      
      sTaim1 = DoubleToStr(GD,0);
      if (MN<10) sTaim2 = StringConcatenate(sTaim2,"0"+DoubleToStr(MN,0));
      else sTaim2 = StringConcatenate(sTaim2,DoubleToStr(MN,0));
      if (DD<10) sTaim3 = StringConcatenate("0",DoubleToStr(DD,0));
      else sTaim3 = DoubleToStr(DD,0);
      sTaim=sTaim1+sTaim2+sTaim3;
   }
   return(sTaim);
}
 

需要帮助改变一个EA

专家顾问应进行反向交易。

而不是卖出限价买入

和买入限价单卖出

附加的文件:
tke.mq4  18 kb
 
mersi:

这里是回答最后一笔交易是盈利还是不盈利的函数。

然后,通过将其答案与零进行比较,你决定是保持TP/SL不变还是改变它们。

你的函数确定 要返回最后一个 订单吗?还是会退回第一个 没有输掉的订单?为什么票面上有一个支票?

我想这样做。

//+----------------------------------------------------------------------------+
double LastOrderProfit() {
   double Profit=0;
   datetime t;
   int i, j;
   for (i=0; i<OrdersHistoryTotal(); i++) {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if (OrderMagicNumber()!=Magic)                  continue;
      if (OrderSymbol()!=Symbol())                    continue;
      if (OrderType()>1)                              continue;
      if (t<OrderCloseTime()) {
         t=OrderCloseTime();
         j=i;
         }
      }
   if (OrderSelect(j,SELECT_BY_POS,MODE_HISTORY)
      Profit=OrderProfit()+OrderSwap()+OrderCommission();
   return(Profit);
} 
//+----------------------------------------------------------------------------+

这是对你的函数的重新设计,以准确地找到最后关闭的订单。

它的缺点是,如果根本没有关闭的订单,它将返回零。因此,使用它,不可能肯定地知道历史上是否有或没有已关闭的订单。毕竟,返回的零并不表明根本没有订单,而是表明它被关闭在零。

 

请告知。

对指标值的呈现感兴趣的只有 最后一次(当前) 吧。然而,当打开一个新的条形图 时,旧的数值仍然保留在图表上....。我怎样才能强行清除这些垃圾呢?是否可以指定这样的条件:对于[0]条,指标值被计算和显示,而对于[1]至[Bar-1]条,这些值被重置?

double Buffer [1];            

int init()
  {

   IndicatorBuffers(1);
  
   SetIndexStyle(0,DRAW_ARROW);
   .........
 
   return(0);
  }

int deinit()
  {
   return(0);
  }

int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) counted_bars=0;
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
       for(int i=limit;i>=0;i--) 
     {
         Buffer [0] = ............;
     }
   return(0);
  }        
 

artmedia70:

它的缺点是,如果根本没有订单被关闭,它将返回0。因此,使用它,不可能肯定地知道历史上是否有任何封闭的订单。毕竟,返回的空值并不意味着该订单根本不存在,而是意味着它被关闭在零点。

谢谢你!虽然你没有回复我,但你回答了我之前关于正确计算利润的问题。

Profit=OrderProfit()+OrderSwap()+OrderCommission();
 
Azerus:

请告知。

对指标值的呈现感兴趣的只有 最后一次(当前) 吧。然而,当打开一个新的条形图时,旧的数值仍然保留在图表上....。我怎样才能强行清除这些垃圾呢?是否可以指定这样的条件:对于[0]条,指标值被计算和显示,而对于[1]至[Bar-1]条,这些值被重置?

在Start()开始时,用EMPTY_VALUE 的值初始化缓冲区。也就是说,在一个新条形图出现时进行,检查零条形图的打开时间,并进行你的垃圾清理逻辑。

 
artmedia70:

你的函数确定 要返回最后一个 订单吗?还是遇到的第一个人 并非无利可图?为什么票面上有一个支票?

我想这样做。

这是对你的函数的转换,以准确找到最后的封闭订单。

它有一个缺点--如果根本就没有关闭的订单,它将返回0。因此,在使用它时,我们无法确定历史上是否有任何已关闭的订单。返回的空值并不表明完全没有订单,但它确实表明订单是以零点关闭的。

1.该函数找到历史上最大的股票订单,这意味着最后关闭的订单(当然,除非我们采取一些特殊的情况,对于这种情况,你的变体的最大关闭时间是最好的)。

2.根据条件 第一笔订单以指定的TP/SL开仓,只有第二笔订单可能以新的TP/SL开仓,这意味着只有当第一笔交易为零时,该函数才能返回零,但如果历史上没有平仓订单,则不能返回。

最后一件事。在你的变体中,函数中j和另一个SELECT的使用是多余的。

这就够了。

 if (t<OrderCloseTime()) {
         t=OrderCloseTime();
      Profit=OrderProfit()+OrderSwap()+OrderCommission();
  }
   return(Profit);
 
snail09:
在Start()开始时,用EMPTY_VALUE的值初始化缓冲区。


这是怎么回事呢?我在指标行 设置中,在int init()之后有这样的内容

   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,165);                     
   SetIndexBuffer(0,Buffer);
   SetIndexEmptyValue(0,0.0);