2020年3月15日日曜日

EA 金閣寺 ソースコード公開!

もう数年前に無料で公開したEA金閣寺にバグが見つかりました。
ご指摘ありがとうございます。
https://mt4kyoto.blogspot.com/2015/12/eamt4.html?showComment=1584272741163

久しぶりにソースを見てみると無駄が多かったのでリビルドしました。
マジックナンバーやコメントの設定も追加しました。

半裁量でポジション管理すれば、面白いEAと思います!



//  金閣寺 Rock on Z So Cock Z 2015/12/25
// Update 2020.03.15
#property strict
#property copyright "TACA"
#property link "mt4kyoto.blogspot.jp"
input int MAGIC=1397;
extern int Profit=200;
input string COMMENT="Kinkaku-G";
extern double Lots=0.03;
int d;
double ProfitP;
datetime TimeOld;
string S=_Symbol;
int OnInit()
   {
   ProfitP=Profit*Point;
   return INIT_SUCCEEDED;
   }
void OnTick()
   {
   if(Time[0]==TimeOld)return;
   TimeOld=Time[0];
   double PosAll=0,PosAve=0,PrSub;
   int PosNum=0,Mode=0,Judge=0;
   for(int i=0; i<OrdersTotal(); i++)
      {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=MAGIC)continue;
      PosAll+=OrderOpenPrice();
      PosNum++;
      }
   if(PosNum)PosAve=PosAll/PosNum;
   Mode=0;
   for(int i=0; i<OrdersTotal(); i++)
      {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=MAGIC)continue;
      if(OrderType())
         {
         Mode=-1;
         PrSub=PosAve-ProfitP;
         PrSub=NormalizeDouble(PrSub,_Digits);
         if(OrderTakeProfit()>PrSub)d=OrderModify(OrderTicket(),OrderOpenPrice(),0,PrSub,0);
         }
      else
         {
         Mode=1;
         PrSub=PosAve+ProfitP;
         PrSub=NormalizeDouble(PrSub,_Digits);
         if(OrderTakeProfit()<PrSub)d=OrderModify(OrderTicket(),OrderOpenPrice(),0,PrSub,0);
         }
      }
   ZeroMemory(Judge);
   if (iMA(S,15,5,0,0,PRICE_CLOSE,1)>iMA(S,15,5,0,0,PRICE_OPEN,1))Judge++;
   if (iMA(S,60,5,0,0,PRICE_CLOSE,1)>iMA(S,60,5,0,0,PRICE_OPEN,1))Judge++;
   if (iMA(S,60,20,0,0,PRICE_CLOSE,1)>iMA(S,60,20,0,0,PRICE_OPEN,1))Judge++;
   if(Mode==1&&Judge==3&&PosAve>Close[0])EntryL();
   if(Mode==-1&&!Judge&&PosAve<Close[0])EntryS();
   if(!Mode&&Judge==3)EntryL();
   if(!Mode&&!Judge)EntryS();
   }
void EntryL()
   {
   d=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,Ask+ProfitP,COMMENT,MAGIC,0,clrRed);
   }
void EntryS()
   {
   d=OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,Bid-ProfitP,COMMENT,MAGIC,0,clrBlue);
   }
//+------------------------------------------------------------------+

0 件のコメント:

コメントを投稿