新手 想建立一個五日高點突破的EA 懇請指點一二 - 页 2

 
陳柏昌:
 SendNotification( 
    my_symbol + "\n" +   "注意!!五日高低區間已穿越 ( " +時間架構T +" )" 

   );


請問 目前圖表如果是H1的時間架構

要怎麼讓時間架構顯示在 通知內呢?


条件成立时发布一次通知,但是要避免一个H1内多次发送,记录每次发送的时间,还在H1的时间内就不用继续发送。

你目前的基础太差了,你连什么是指标都不清楚,先搞清楚指标,EA,脚本的区别。

建议去学习code base 中的例子。

 
大大說中了!! 現在一分鐘內可以狂發很多次訊息與下很多次單 該怎麼避免呢?
 
請問 目前圖表如果是H1的時間架構
就發佈通知 : H1跳出5區間

請問 目前圖表如果是的時間架構
就發佈通知 : H4跳出5區間

該怎麼寫呢?
 

你基础太差了,我写了你也看不懂。

建议你先学着写指标,试着先2均线的指标,均线交叉时报警,看看如何控制报警频次。

 
陳柏昌:
大大說中了!! 現在一分鐘內可以狂發很多次訊息與下很多次單 該怎麼避免呢?
這個似乎可以 還在測試中


   static datetime PTime;
   datetime CTime = SeriesInfoInteger (Symbol(), Period(), SERIES_LASTBAR_DATE);

   if (PTime == 0) {
      PTime = CTime;
      CheckNew = false;
   } else if (PTime != CTime) {
      PTime = CTime;
      CheckNew = true;
   } else {
      CheckNew = false;
   }
 
//+----------------------------------------------- -------------------+
//| EA初始化1
//+----------------------------------------------- -------------------+
#include<Trade\Trade.mqh>//包含執行的交易庫
#include<Trade\PositionInfo.mqh>//包含部位的資訊庫

input int UpPeriod=10;
input int DownPeriod=10;

bool   SendNotification;

   int CheckBar;
   int Kcount;
   int iKcount;

input int 已有部位 = 0;
 int iMyPositions;
 int iiMyPositions;

double  UPindex; //存儲句柄
double  Downindex;  //存儲句柄

double Low_buf[];   //存儲每個柱形價格的動態數組
double High_buf[];  //存儲每個柱形價格的動態數組
double Close_buf[]; //存儲每個柱形價格的動態數組

double input 下單量 =0.01;

double hi5;
double low5;

ENUM_TIMEFRAMES my_timeframe; //存儲時間框架的變量

CTrade m_Trade; //執行交易的結構體
CPositionInfo m_Position; //獲取持倉信息的結構體
//+----------------------------------------------- -------------------+
//| EA初始化2
//+----------------------------------------------- -------------------+
int OnInit()
  {
  
   iMyPositions = 已有部位;
   iiMyPositions = 已有部位;
   my_timeframe= PERIOD_CURRENT; //保存圖表的當前時間框架,使EA對其的進一步操作。 

 
    ChartIndicatorAdd ( ChartID (), 0 ,hi5);   //將指標添加到價格圖表中
    ChartIndicatorAdd ( ChartID (), 0 ,low5); //將指標添加到價格圖表中
      
   ArraySetAsSeries (Close_buf, true ); //將 數組的索引設置為時間序列

   return(0); //返回0,初始化結束
  }
//+----------------------------------------------- -------------------+
//| EA去初始化函數|
//+----------------------------------------------- -------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease (UPindex);   //刪除指標句柄並釋放分配給它的存儲空間
   IndicatorRelease (Downindex); //刪除指標句柄並釋放分配給它的存儲空間
   ArrayFree(Close_buf); //釋放buf的數據
  }
//+----------------------------------------------- -------------------+
//| EA的tick函數|
//+----------------------------------------------- -------------------+
void OnTick()
  {
 
   if(CopyClose(Symbol(),my_timeframe,0,2,Close_buf)!=2) //將價格數據拷貝到動態數Close_buf中,以於進一步處理
     {
      Print("Failed to copy data from the indicator buffer or price chart buffer"); //打印相關錯誤信息到日誌文件
      return; //並退出函數 
     }    
     
    
    UPindex=iHighest(Symbol(),my_timeframe,MODE_HIGH,UpPeriod,2);
   double hi5=iHigh(Symbol(),my_timeframe,UPindex);

   Downindex=iLowest(Symbol(),my_timeframe,MODE_LOW,DownPeriod,2);
   double low5=iLow(Symbol(),my_timeframe,Downindex);


  iKcount = SeriesInfoInteger (Symbol(), Period(), SERIES_BARS_COUNT);
   
   if (Kcount == 0)   Kcount = iKcount;
   if (Kcount == iKcount)  CheckBar = 0 ;
   if (iKcount != Kcount ) CheckBar = 1 ;  



 if (CheckBar == 1 ) //////////////新Bar 超大if
 { 
   // SendNotification( 
   //          "hi5" + "\n    " + hi5 +   "\n " 
   //          "Close_buf[1]" + "\n    " + Close_buf[1] +   "\n " 
   //          "low5" + "\n    " + low5 +   "\n " 
   //  );

 if(Close_buf[1]>hi5) //收盤站上 5周期高点
 {        
     if (iMyPositions<0)
     {
      m_Trade.Buy( 下單量 ,Symbol());
      iMyPositions=0;
      }
      if (iMyPositions == 0 )
      {
       m_Trade.Buy( 下單量 ,Symbol());
       iMyPositions=1;
       }
 
       if( iMyPositions != iiMyPositions)
       SendNotification( 
         Symbol() + "\n" +  "站上 KF"  +"\n"   + "請務必評估自身風險承受度與資金控管,善設停損。"        // 通知文本  
   );
   
 }  
   
     
     

   if(Close_buf[1]<low5) //收盤跌破5周期低点
     {
     if (iMyPositions>0)
     {
      m_Trade.Sell( 下單量 ,Symbol());
      iMyPositions=0;
      }
      if (iMyPositions == 0 )
      {
       m_Trade.Sell( 下單量 ,Symbol());
       iMyPositions=-1;
       }
 
       if( iMyPositions != iiMyPositions)
       SendNotification( 
         Symbol() + "\n" +  "跌破 KF"  +"\n"   + "請務必評估自身風險承受度與資金控管,善設停損。"        // 通知文本  
   );
     }
     
  iiMyPositions = iMyPositions;
  Kcount = iKcount ;
      }//////////////新Bar 超大if
  }
//+----------------------------------------------- -------------------+
 
以上似乎可以 但偶爾會少下單 是甚麼原因呢?
 

可以利用下單回報 

如果沒下成功


可以重送單


 do

            { m_Trade.PositionClose( Symbol(),偏差值);

              Sleep(睡覺);Redone=true;

              Print(Symbol(), "做多_平空單 = ",m_Trade.ResultRetcode()+". Code description: ",m_Trade.ResultRetcodeDescription());

              if(m_Trade.ResultRetcode()==10009) Redone = false ;

              if(m_Trade.ResultRetcode()==10036) Redone = false ;

            }

            while(Redone)

 
Ziheng Zhuang:

你基础太差了,我写了你也看不懂。

建议你先学着写指标,试着先2均线的指标,均线交叉时报警,看看如何控制报警频次。

这个管用,1均线试试😄