SSブログ
               

「Spreaded_Score_Type1_ver002.mq4」EAをインジケーター化 [EA作成]

「Spreaded_Score_Type1_ver002.mq4」をさらにテストしながら修正していく過程で、それぞれのテクニカルから得た結果と計算結果の動きをインジケータにして表示しながら重み付けなどの調整がしたくなりました。
 
そこで、EAをインジケーター化することにしました。
 
EAをインジケーター化する為に、不要なプログラムを取り除いてとりあえず動くようになったのが下記インジケータ「Spreaded_Score_Indi1_ver001.mq4」です。 

まだまだなところ多く、 For文などを追加してないため表示はしますが過去のラインは引いてくれません。現在からラインを引き始めるので少々待たないと表示が始まりません。1分足で動かさないと「なんにも動いてない」と勘違いしそうです。まあ、テストに使う分には大丈夫そうなので、このままEAテストの時に表示して使おうと思います。あとで、過去のラインも引けるようにFor文を追加したVer.も作りますがいつになるか・・・。
 
このインジを動かしていると大体±75ぐらいの値で売り買いすれば良いのではないかと思っています。プログラムには無駄な記載がまだ多いのでシェープしながらキレイにしていきたいところです。
 
出来上がったインジをiCustom関数化して使えばEAも動かしやすいのではないかと考えて勉強中です。 
 


//+------------------------------------------------------------------+
//|                                  Spreaded_Score_Indi1_ver001.mq4 |
//|                                                        Littlecub |
//|                      http://littlecubonbackst.blog.so-net.ne.jp/ |
//+------------------------------------------------------------------+
#property copyright "Littlecub Custom Indicator"
#property indicator_separate_window
#property indicator_minimum -100
#property indicator_maximum 100
#property indicator_buffers 8
//---テクニカル荷重配分パラメータ(トータル100%)
extern int P_MA =              20;         //初期値:20% トレンド
extern int P_BB =              20;         //初期値:20% トレンド
extern int P_PSAR =            20;         //初期値:20% トレンド
extern int P_Stoch =           15;         //初期値:15% シグナル
extern int P_RSI=              15;         //初期値:15% シグナル
extern int P_MACD =            10;         //初期値:10% シグナル
//---機能使用スイッチパラメータ
extern bool UseStopLoss =     False;      //初期値:False
extern bool UseTakeProfit =   False;      //初期値:False
extern bool UseTrailingStop = True;       //初期値:True
extern bool SignalMail =      False;      //初期値:False
extern bool EachTickMode =    True;       //初期値:True
extern bool ReverseSignal =   False;      //初期値:False
extern bool PositionClose =   False;      //初期値:False
extern bool ManyPosition  =   False;      //初期値:False
//---テクニカル荷重配分バッファ
double Buffer1[];             //Trend1 Point_T1
double Buffer2[];             //Trend2 Point_T2
double Buffer3[];             //Trend3 Point_T3
double Buffer4[];             //Signal1 Point_S1
double Buffer5[];             //Signal2 Point_S2
double Buffer6[];             //Signal3 Point_S3
double Buffer7[];             //Point_TS
double Buffer8[];             // 
//---外部宣言
int BarCount;
int Current;
bool TickCheck =              False;
double Trend1;                //MA
double Trend11;               //MA
double Trend12;               //MA
double Trend13;               //MA
double Trend14;               //MA
double Trend2;                //BB
double Trend3;                //PSAR
double Signal1;               //Stoch
double Signal2;               //RSI
double Signal3;               //MACD
double Point_T1;              //Trend1
double Point_T2;              //Trend1 + Trend2
double Point_T3;              //Trend1 + Trend2 + Trend3
double Point_S1;              //Trend1 + Trend2 + Trend3 + Signal1
double Point_S2;              //Trend1 + Trend2 + Trend3 + Signal1 + Signal2
double Point_S3;              //Trend1 + Trend2 + Trend3 + Signal1 + Signal2 + Signal3
double Point_TS;              //Trend1 + Trend2 + Trend3 + Signal1 + Signal2 + Signal3
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
   BarCount = Bars;
   if (EachTickMode) Current = 0; else Current = 1;
   IndicatorBuffers (8);
   SetIndexBuffer (0, Buffer1);          //Trend1
   SetIndexBuffer (1, Buffer2);          //Trend2
   SetIndexBuffer (2, Buffer3);          //Trend3
   SetIndexBuffer (3, Buffer4);          //Signal1
   SetIndexBuffer (4, Buffer5);          //Signal2
   SetIndexBuffer (5, Buffer6);          //Signal3
   SetIndexBuffer (6, Buffer7);          //Point_TS
   SetIndexBuffer (7, Buffer8);
   SetIndexStyle (0,DRAW_LINE, EMPTY, 1, White);          //Trend1
   SetIndexStyle (1,DRAW_LINE, EMPTY, 1, Pink);           //Trend2
   SetIndexStyle (2,DRAW_LINE, EMPTY, 1, Red);            //Trend3
   SetIndexStyle (3,DRAW_LINE, EMPTY, 1, Aqua);           //Signal1
   SetIndexStyle (4,DRAW_LINE, EMPTY, 1, Blue);           //Signal2
   SetIndexStyle (5,DRAW_LINE, EMPTY, 1, Violet);         //Signal3
   SetIndexStyle (6,DRAW_LINE, EMPTY, 2, Chartreuse);     //Point_TS
   SetIndexStyle (7,DRAW_LINE, EMPTY, 1, Magenta);
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator start function                                  |
//+------------------------------------------------------------------+
int start() {
   int Total, Ticket;
   double StopLossLevel, TakeProfitLevel;
   if (EachTickMode && Bars != BarCount) TickCheck = False;
   Total = OrdersTotal();
//+------------------------------------------------------------------+
//| Variable         //テクニカル計算                                |
//+------------------------------------------------------------------+
//---Trend1 MA
   double MA_05 = iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE,0);
   double MA_10 = iMA(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,0);
   double MA_25 = iMA(NULL,0,25,0,MODE_EMA,PRICE_CLOSE,0);
   double MA_50 = iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0);
   double MA_75 = iMA(NULL,0,75,0,MODE_EMA,PRICE_CLOSE,0);
//---Trend2 Bollinger Bands
   double BB_Main=iBands(NULL,0,21,0,0,PRICE_CLOSE,MODE_MAIN,0);
   double BB_U1=iBands(NULL,0,21,1,0,PRICE_CLOSE,MODE_UPPER,0); 
   double BB_L1=iBands(NULL,0,21,1,0,PRICE_CLOSE,MODE_LOWER,0); 
   double BB_U2=iBands(NULL,0,21,2,0,PRICE_CLOSE,MODE_UPPER,0); 
   double BB_L2=iBands(NULL,0,21,2,0,PRICE_CLOSE,MODE_LOWER,0); 
   double BB_U3=iBands(NULL,0,21,3,0,PRICE_CLOSE,MODE_UPPER,0); 
   double BB_L3=iBands(NULL,0,21,3,0,PRICE_CLOSE,MODE_LOWER,0);
//---Trend3 Parabolic SAR
   double PSAR=iSAR(NULL,0,0.02,0.2,0);
//   double PSAR=iSAR(NULL,TimeFramePSAR,0.02,0.2,0);
//---Signal1 Stochstics
   double St_Signal1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);
   double St_Signal0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);
   double St_Main1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
   double St_Main0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
//---Signal2 RSI
   double RSI0 = iRSI(NULL,0,14,PRICE_CLOSE,0);
//---Signal3 MACD
   double Macd_Signal1 = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   double Macd_Signal0 = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   double Macd_Main1 = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   double Macd_Main0 = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
//+------------------------------------------------------------------+
//| Point         //テクニカル荷重配分ポイント計算                   |
//+------------------------------------------------------------------+
//---Trend1 MA
   if (MA_05 > MA_10) Trend11 = P_MA * 1 / 15; else Trend11 = P_MA * (-1) / 15;
   if (MA_10 > MA_25) Trend12 = P_MA * 2 / 15; else Trend12 = P_MA * (-2) / 15;
   if (MA_25 > MA_50) Trend13 = P_MA * 4 / 15; else Trend13 = P_MA * (-4) / 15;
   if (MA_50 > MA_75) Trend14 = P_MA * 8 / 15; else Trend14 = P_MA * (-8) / 15;
   Trend1 = Trend11 + Trend12 + Trend13 +Trend14;     //Signal
   Point_T1 = Trend1;
//---Trend2 Bollinger Bands
   if (Close[0] < BB_Main)
   Trend2 = P_BB * (BB_L2 - Close[0]) / (BB_L2 - BB_L3);     //BuySignal
   if (Close[0] > BB_Main)
   Trend2 = P_BB * (BB_U2 - Close[0]) / (BB_U3 - BB_U2);     //SellSignal
   Point_T2 = Point_T1 + Trend2;
//---Trend3 Parabolic SAR
   if (Close[0] < PSAR) Trend3 = P_PSAR;     //BuySignal
   if (Close[0] > PSAR) Trend3 = P_PSAR * (-1);     //SellSignal
   Point_T3 = Point_T2 + Trend3;
//---Signal1 Stochstics
   if (St_Signal1 >= St_Main1 && St_Signal0 < St_Main0)
   Signal1 = P_Stoch * 1;                               //BuySignal
   if (St_Signal1 <= St_Main1 && St_Signal0 > St_Main0)
   Signal1 = P_Stoch * (-1);                            //SellSignal
   Point_S1 = Point_T3 + Signal1;
//---Signal2 RSI
   if (RSI0 < 25) Signal2 = P_RSI * (25 - RSI0) / 25;     //BuySignal
   if (RSI0 > 75) Signal2 = P_RSI * (75 - RSI0) / 25;     //SellSignal
   Point_S2 = Point_S1 + Signal2;
//---Signal3 MACD
   if (Macd_Signal1 >= Macd_Main1 && Macd_Signal0 < Macd_Main0)
   Signal3 = P_MACD * 1;     //BuySignal
   if (Macd_Signal1 <= Macd_Main1 && Macd_Signal0 > Macd_Main0)
   Signal3 = P_MACD * (-1);    //SellSignal
   Point_S3 = Point_S2 + Signal3;
//---Point_TS
   Point_TS = Trend1 + Trend2 + Trend3 + Signal1 + Signal2 + Signal3;
   Print ("Trend and Signal Point is ", Point_TS); 
//+------------------------------------------------------------------+
//| Point Buffer         //テクニカル荷重配分ポイント保管            |
//+------------------------------------------------------------------+
//---Trend1 MA
   Buffer1[0]=Point_T1;
//---Trend2 Bollinger Bands
   Buffer2[0]=Point_T2;
//---Trend3 Parabolic SAR
   Buffer3[0]=Point_T3;
//---Signal1 Stochstics
   Buffer4[0]=Point_S1;
//---Signal2 RSI
   Buffer5[0]=Point_S2;
//---Signal3 MACD
   Buffer6[0]=Point_S3;
//---Point_TS
   Buffer7[0]=Point_TS;
}
//+------------------------------------------------------------------+ 



「Spreaded_Score_Type1_ver001.mq4」のその後2 [EA作成]

「Spreaded_Score_Type1_ver001.mq4」ですが、「Spreaded_Score_Type1_ver002.mq4」とヴァージョンが進み、下のようにとりあえず完成しました。ただし、テストしましたが、まだまだ多くの調整・変更が必要です。今後は調整していく様子を書いてみたいと思います。

予定通りでないところは、前回も書きましたが「レジスタンス」のところをとりあえずカットして作成しています。 それ以外はシンプルに書いて動くところまでこぎつけました。まだ、動くだけの状態ですので、テストを繰り返しながら作りこんでいかないと売り買い収支がプラスにならないことでしょう。でも、新しい考え方で作れたのは大きな進歩だと思っています。「なんだ、こんなのだったら簡単に作れるし、もっと上手に書けるよ。」という方もいっぱいいらっしゃるとは思いますが、初心者レベルのプログラムですので長い目で見てやってください。 

下記の3つのブロックとそれにまつわる最初のパラメータ・宣言部分以外(売り買い動作部分)は、他のEAからパクってます。

  • Variable(テクニカル計算)
  • Point(テクニカル荷重配分ポイント計算)
  • Signal(シグナル発生条件)


//+------------------------------------------------------------------+
//|                                  Spreaded_Score_Type1_ver002.mq4 |
//|                                                        Littlecub |
//|                      http://littlecubonbackst.blog.so-net.ne.jp/ |
//+------------------------------------------------------------------+
#property copyright "Littlecub"
#property link      "http://littlecubonbackst.blog.so-net.ne.jp/"

//---取引基本パラメータ
extern int MagicNumber =      20121213;   //作成日をマジックナンバーとする
extern double Lots =          0.01;       //初期値:0.01(最低ロット1000通貨単位)
extern int Slippage =         1;          //初期値:1pips
extern int StopLoss =         30;         //初期値:30pips(Min値)
extern int TakeProfit =       30;         //初期値:30pips(Min値)
extern int TrailingStop =     30;         //初期値:30pips(Min値)
//---テクニカル期間パラメータ
extern int TimeFrameMA =      60;         //初期値:60minute トレンド
extern int TimeFrameBB =      60;         //初期値:60minute トレンド
extern int TimeFramePSAR =    60;         //初期値:60minute トレンド
extern int TimeFramePIVOT =   60;         //初期値:60minute レジスタンス
extern int TimeFrameSandR =   60;         //初期値:60minute レジスタンス
//---テクニカル荷重配分パラメータ(トータル100%)
extern int P_Stoch =           15;         //初期値:15% シグナル
extern int P_RSI=              15;         //初期値:15% シグナル
extern int P_MACD =            10;         //初期値:10% シグナル
extern int P_MA =              20;         //初期値:20% トレンド
extern int P_BB =              20;         //初期値:20% トレンド
extern int P_PSAR =            20;         //初期値:20% トレンド
//---シグナル発生閾値パラメータ(MIN-100~MAX100ポイント)
extern int P_Signal_buy =      50;         //初期値:50ポイント
extern int P_Signal_sell =     -50;        //初期値:-50ポイント
//---機能使用スイッチパラメータ
extern bool UseStopLoss =     False;      //初期値:False
extern bool UseTakeProfit =   False;      //初期値:False
extern bool UseTrailingStop = True;       //初期値:True
extern bool SignalMail =      False;      //初期値:False
extern bool EachTickMode =    True;       //初期値:True
extern bool ReverseSignal =   False;      //初期値:False
extern bool PositionClose =   False;      //初期値:False
extern bool ManyPosition  =   False;      //初期値:False         
//---外部宣言
#define SIGNAL_NONE           0
#define SIGNAL_BUY            1
#define SIGNAL_SELL           2
#define SIGNAL_CLOSEBUY       3
#define SIGNAL_CLOSESELL      4
int BarCount;
int Current;
bool TickCheck =           False;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {
   BarCount = Bars;
   if (EachTickMode) Current = 0; else Current = 1;
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {                             //プログラムスタート
   int Order = SIGNAL_NONE;
   int Total, Ticket;
   double StopLossLevel, TakeProfitLevel;
   if (EachTickMode && Bars != BarCount) TickCheck = False;
   Total = OrdersTotal();
   Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable         //テクニカル計算                                |
//+------------------------------------------------------------------+
//---Signal 1 Stochstics
   double St_Signal1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);
   double St_Signal0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);
   double St_Main1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
   double St_Main0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
//---Signal 2 RSI
   double RSI0 = iRSI(NULL,0,14,PRICE_CLOSE,0);
//---Signal 3 MACD
   double Macd_Signal1 = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   double Macd_Signal0 = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   double Macd_Main1 = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   double Macd_Main0 = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
//---Trend 1 MA
   double MA_05 = iMA(NULL,TimeFrameMA, 5,0,MODE_EMA,PRICE_CLOSE,0);
   double MA_10 = iMA(NULL,TimeFrameMA,10,0,MODE_EMA,PRICE_CLOSE,0);
   double MA_25 = iMA(NULL,TimeFrameMA,25,0,MODE_EMA,PRICE_CLOSE,0);
   double MA_50 = iMA(NULL,TimeFrameMA,50,0,MODE_EMA,PRICE_CLOSE,0);
   double MA_75 = iMA(NULL,TimeFrameMA,75,0,MODE_EMA,PRICE_CLOSE,0);
//---Trend 2 Bollinger Bands
   double BB_Main=iBands(NULL,TimeFrameBB,21,0,0,PRICE_CLOSE,MODE_MAIN,0);
   double BB_U1=iBands(NULL,TimeFrameBB,21,1,0,PRICE_CLOSE,MODE_UPPER,0); 
   double BB_L1=iBands(NULL,TimeFrameBB,21,1,0,PRICE_CLOSE,MODE_LOWER,0); 
   double BB_U2=iBands(NULL,TimeFrameBB,21,2,0,PRICE_CLOSE,MODE_UPPER,0); 
   double BB_L2=iBands(NULL,TimeFrameBB,21,2,0,PRICE_CLOSE,MODE_LOWER,0); 
   double BB_U3=iBands(NULL,TimeFrameBB,21,3,0,PRICE_CLOSE,MODE_UPPER,0); 
   double BB_L3=iBands(NULL,TimeFrameBB,21,3,0,PRICE_CLOSE,MODE_LOWER,0);
//---Trend 3 Parabolic SAR
   double PSAR=iSAR(NULL,TimeFramePSAR,0.02,0.2,0);
//+------------------------------------------------------------------+
//| Point         //テクニカル荷重配分ポイント計算                   |
//+------------------------------------------------------------------+
//---Signal 1 Stochstics
   double Signal1 = 0;
   if (St_Signal1 >= St_Main1 && St_Signal0 < St_Main0)
   Signal1 = P_Stoch * 1;                               //BuySignal
   if (St_Signal1 <= St_Main1 && St_Signal0 > St_Main0)
   Signal1 = P_Stoch * (0-1);                            //SellSignal
//---Signal 2 RSI
   double Signal2 = 0;
   if (RSI0 < 25) Signal2 = P_RSI * (25 - RSI0) / 25;     //BuySignal
   if (RSI0 > 75) Signal2 = P_RSI * (75 - RSI0) / 25;     //SellSignal
//---Signal 3 MACD
   double Signal3 = 0;
   if (Macd_Signal1 >= Macd_Main1 && Macd_Signal0 < Macd_Main0)
   Signal3 = P_MACD * 1;     //BuySignal
   if (Macd_Signal1 <= Macd_Main1 && Macd_Signal0 > Macd_Main0)
   Signal3 = P_MACD * (0-1);    //SellSignal
//---Trend 1 MA
   double Trend1 = 0;
   double Trend11 = 0;
   double Trend12 = 0;
   double Trend13 = 0;
   double Trend14 = 0;
   if (MA_05 > MA_10) Trend11 = P_MA * 1 / 4; else Trend11 = P_MA * (0-1) / 4;
   if (MA_10 > MA_25) Trend12 = P_MA * 1 / 4; else Trend12 = P_MA * (0-1) / 4;
   if (MA_25 > MA_50) Trend13 = P_MA * 1 / 4; else Trend13 = P_MA * (0-1) / 4;
   if (MA_50 > MA_75) Trend14 = P_MA * 1 / 4; else Trend14 = P_MA * (0-1) / 4;
   Trend1 = Trend11 + Trend12 + Trend13 +Trend14;     //Signal
//---Trend 2 Bollinger Bands
   double Trend2 = 0;
   if (Close[0] < BB_Main)
   Trend2 = P_BB * (BB_L2 - Close[0]) / (BB_L2 - BB_L3);     //BuySignal
   if (Close[0] > BB_Main)
   Trend2 = P_BB * (BB_U2 - Close[0]) / (BB_U3 - BB_U2);     //SellSignal
//---Trend 3 Parabolic SAR
   double Trend3 = 0;
   if (Close[0] < PSAR) Trend3 = P_PSAR;     //BuySignal
   if (Close[0] > PSAR) Trend3 = P_PSAR * (0-1);     //SellSignal
//+------------------------------------------------------------------+
//| Signal        //シグナル発生条件                                 |
//+------------------------------------------------------------------+
   double Signal = Signal1 + Signal2 + Signal3 + Trend1 + Trend2 + Trend3;
   Print ("Signal Point is ", Signal); 
//---Buy Signal
   if (Signal > P_Signal_buy) Order = SIGNAL_BUY;       //BuySignal
//---Sell Signal
   if (Signal < P_Signal_sell) Order = SIGNAL_SELL;     //SellSignal
//+------------------------------------------------------------------+
//| Check Position Exit&Trailing Stop
//+------------------------------------------------------------------+
   bool IsTrade = True;
   for (int i=0;i<Total;i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
         IsTrade = ManyPosition;
         if (OrderType() == OP_BUY) {
            //Exit Buy
            if (PositionClose) {
               if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
                  OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
                  if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
                  if (!EachTickMode) BarCount = Bars;
                  IsTrade = True;
                  continue;
               }
            }
            //Trailing Stop
            if(UseTrailingStop && TrailingStop > 0) { 
               if(Bid - OrderOpenPrice() > Point * TrailingStop) {
                  if(OrderStopLoss() < Bid - Point * TrailingStop) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, Yellow);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         }
         else {
            //Exit Sell
            if (PositionClose) {
               if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
                  OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
                  if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
                  if (!EachTickMode) BarCount = Bars;
                  IsTrade = True;
                  continue;
               }
            }
            //Trailing Stop
            if (UseTrailingStop && TrailingStop > 0) { 
               if ((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
                  if ((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, Yellow);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         }
      }
   }
//+------------------------------------------------------------------+
//| Order
//+------------------------------------------------------------------+
   //Check free margin
   if (AccountFreeMargin() < (1000 * Lots)) {
      Print("We have no money. Free Margin = ", AccountFreeMargin());
      return(0);
      }
   else {
      //Buy
      if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
         if(IsTrade) {
            if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
            if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
            Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
            if(Ticket > 0) {
               if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
                  Print("BUY order opened : ", OrderOpenPrice());
                  if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
               }
               else {
                  Print("Error opening BUY order : ", GetLastError());
               }
            }
            if (EachTickMode) TickCheck = True;
            if (!EachTickMode) BarCount = Bars;
            return(0);
         }
      }
      //Sell
      if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
         if(IsTrade) {
            if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
            if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
            Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
            if(Ticket > 0) {
               if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
                  Print("SELL order opened : ", OrderOpenPrice());
                  if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
               }
               else {
                  Print("Error opening SELL order : ", GetLastError());
               }
            }
            if (EachTickMode) TickCheck = True;
            if (!EachTickMode) BarCount = Bars;
            return(0);
         }
      }
      if (!EachTickMode) BarCount = Bars;
      return(0);
   }
}
//+------------------------------------------------------------------+


 
 

 



「Spreaded_Score_Type1_ver001.mq4」のその後1 [EA作成]

↑ 随分お世話になっております。しろふくろう様 

 

さて、作り出してから随分経ちましたが「Spreaded_Score_Type1_ver001.mq4」・・・まだ、未完成です。

<レジスタンス>・・・ピボット、サポートアンドレジスタンス」のところで行き詰ってます。

最初はレジスタンスなしで作ろうかと方向転換中です。 

 

ピボットの計算を他のプログラムから取り入れようとしていましたが、ここがなかなかうまくいかないところで・・・、というか、きっと、ピボットの計算が結構長くて複雑で難しく、理解してない私はどの部分を取り込んだら良いかで苦戦してます。おバカですみません。でも、もうちょっと頑張ってレジスタンスなしVerを完成させてみたいと思います。

また、それとは別に考えていることがひとつあります。

MT4のプログラムで自動売り買いをする為には、MT4を使えるFX業者と取引するしかありませんが、スプレッドに関して最安のところを選択しても、アルパリのUSDJPY:0.8~1.2、EURJPY:1.0~1.6ですが、MT4という条件さえなければ、SBIFXTのUSDJPY:0.11、EURJPY:0.59です。この差は大きいのでなんとかSBIFXTで自動取引を出来るように出来ないかと考えています。今のところ、MT4でシグナルを発生させて、マクロ系のソフトでSBIFXTの売り買いボタンを押しちゃうと言うぐらい大雑把にしか考えてませんが、上がひと段落したらやってみたいと思っています。

それはおいおいということで・・・。 

 

↑ これにもお世話になっております。しろふくろう様

↓ これ持ってないのですが、持ってないからピボットがうまく使えないのかな?買おうかな・・・。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。