EA作ってみました
HPやYoutubeをいくつか参考にしてみました
順張りのEAです
2022年9月から2023年9月まで金、1万円、マイクロ口座で0.1で実行!

1万円で始めて、8298円になりました。
終わってますw
一筋縄ではいきませんね~

下は記録としてソースを上げています
絶対勝たないので、利用しないでください!

//+------------------------------------------------------------------+
//|                                                       mv-win.mq4 |
//|                        Copyright 2022, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include <stdlib.mqh>

//--- input parameters
input int EA_NUMBER = 690406;
input double   lots = 0.01;
input datetime stop_start1;
input datetime stop_end1;
input datetime stop_start2;
input datetime stop_end2;
input datetime stop_start3;
input datetime stop_end3;
double max_buy_profit = 0; //最大利益
double max_sell_profit = 0; //最大利益
bool reseted_buy = false;
bool reseted_sell = false;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {
//---
    if(lots > 0.1) {
        printf("エラー:lotsは0.1より大きく出来ません。処理を中断します。");
        MessageBox("lotsは0.1より大きく出来ません。処理を中断します。","エラー",0);
        return (INIT_PARAMETERS_INCORRECT);
    }
//---
    return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {
//---
    int buy_ticket = -1;
    double buy_lots = 0.0;
    double buy_price = 0.0;
    int sell_ticket = -1;
    double sell_lots = 0.0;
    double sell_price = 0.0;

//立ち玉の存在を確認する
    int totalOrder = OrdersTotal();
    for(int i = 0; i < totalOrder; i++) {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == EA_NUMBER) {
            if(OrderType() == OP_BUY) {
                buy_ticket = OrderTicket();
                buy_lots = OrderLots();
                buy_price = OrderOpenPrice();
            }
            if(OrderType() == OP_SELL) {
                sell_ticket = OrderTicket();
                sell_lots = OrderLots();
                sell_price = OrderOpenPrice();
            }
        }
    }
    printf("buy_ticket:%d,sell_ticket:%d",buy_ticket,sell_ticket);
    if(buy_ticket != -1 && sell_ticket != -1) {
        //もし売りと買いの両方が存在する時は以上なので、すべてを決済し、終了する
        closeOrder(Bid,buy_ticket,buy_lots,Blue);
        closeOrder(Ask,sell_ticket,sell_lots,Red);
        printf("売りと買いの両方の注文が入っています。異常が発生した為、処理を中断します。");
        MessageBox("売りと買いの両方の注文が入っています。異常が発生した為、処理を中断します。","エラー",0);
        ExpertRemove();
    }

//移動平均線も値を取得する
    double ma21 = iMA(NULL,0,21,0,MODE_SMMA,PRICE_CLOSE,1);
    double ma50 = iMA(NULL,0,50,0,MODE_SMMA,PRICE_CLOSE,1);
//double ma200 = iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,1);
    double rsi = iRSI(NULL,0,14,PRICE_CLOSE,1);
    double macdSig = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1);
    double macdMain = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
    double cci = iCCI(NULL,0,13,PRICE_CLOSE,1);

    printf("Ask:%f,Bid:%f",Ask,Bid);
    printf("ma21:%f,ma50:%f",ma21,ma50);
//printf("ma21:%f,ma50:%f,ma200:%f",ma21,ma50,ma200);

    if(buy_ticket == -1 && ma50 > Ask) {
        //新たな買い注文を出せるようリセットする
        reseted_buy = true;
    }
    if(sell_ticket == -1 && ma50 < Bid) {
        //新たな売り注文を出せるようリセットする
        reseted_sell = true;
    }
    if(buy_ticket != -1) {
        if((Bid - buy_price) > max_buy_profit ) {
            max_buy_profit = (Bid - buy_price);
        }
        //買い注文がある時決済を行う
        if(ma50 > ma21 ) {
            //if(ma50 > ma21 || ma200 > ma21 || ma200 > ma50) {
            //移動平均線が、上からma21,ma50,ma200の順が崩れたら買いを損切
            closeOrder(Bid,buy_ticket,buy_lots,Blue);
            reseted_buy = false;
            max_buy_profit = 0;
        } else if(ma50 > Bid) {
            //価格が、移動平均線のma50の価格より下に行くと買いを損切
            closeOrder(Bid,buy_ticket,buy_lots,Blue);
            reseted_buy = false;
            max_buy_profit = 0;
        } else if(macdMain < macdSig) {
            closeOrder(Bid,buy_ticket,buy_lots,Blue);
            reseted_buy = false;
            max_buy_profit = 0;
        } else if(max_buy_profit > (Ask - Bid)) {
            //価格が、移動平均線のma50とma21差の価格の2倍以上ma21より上に行くと買いを利食い
            closeOrder(Bid,buy_ticket,buy_lots,Blue);
            reseted_buy = false;
            max_buy_profit = 0;
        }
    }

    if(sell_ticket != -1 ) {
        if((sell_price - Ask) > max_sell_profit ) {
            max_sell_profit = (sell_price - Ask);
        }
        //売り注文がある時決済を行う
        if(ma50 < ma21) {
            //if(ma50 < ma21 || ma200 < ma21 || ma200 < ma50) {
            //移動平均線が、上からma200,ma50,ma21の順が崩れたら売りを損切
            closeOrder(Ask,sell_ticket,sell_lots,Red);
            reseted_sell = false;
            max_sell_profit = 0;
        } else if(ma50 < Ask) {
            //価格が、移動平均線のma50の価格より上に行くと売りを損切
            closeOrder(Ask,sell_ticket,sell_lots,Red);
            reseted_sell = false;
            max_sell_profit = 0;
        } else if(macdMain > macdSig) {
            closeOrder(Ask,sell_ticket,sell_lots,Red);
            reseted_sell = false;
            max_sell_profit = 0;
        } else if(max_sell_profit > (Ask - Bid)) {
            //価格が、移動平均線のma50とma21差の価格の2倍以上ma21より下に行くと売りを利食い
            closeOrder(Ask,sell_ticket,sell_lots,Red);
            reseted_sell = false;
            max_sell_profit = 0;
        }
    }

    if(buy_ticket == -1 && sell_ticket == -1) {
        //新規注文
        printf("rsi:%f",rsi);
        if(reseted_buy &&  macdMain > macdSig && rsi > 50.0 && (Ask - Bid) < (ma21 - ma50) && cci < 100) {
            //if(reseted_buy && rsi > 70.0 && (Ask - Bid)<(ma21-ma50)) {
            if(Ask > ma21) {
                //if(Ask > ma21 && Bid > ma21 && ma21 > ma50) {
                //if(Ask > ma21 && Bid > ma21 && ma21 > ma50 && ma50 > ma200) {
                int ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, (uint)0.03, 0, 0, "NEW Ask", EA_NUMBER, 0, Blue);
            }
        }
        if(reseted_sell &&  macdMain < macdSig && rsi < 50.0 && (Ask - Bid) < (ma50 - ma21) && cci > -100) {
            //if(reseted_sell && rsi < 30.0 && (Ask - Bid)<(ma50-ma21)) {
            if(ma21 > Ask) {
                //if(ma21 > Ask && ma21 > Bid && ma50 > ma21) {
                //if(ma21 > Ask && ma21 > Bid && ma200 > ma50 && ma50 > ma21) {
                int ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, (uint)0.03, 0, 0, "NEW Bid", EA_NUMBER, 0, Red);
            }
        }
    }
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool closeOrder(double close_price,int close_ticket, double close_lots, color close_color) {
    if(OrderClose(close_ticket, close_lots, close_price, (uint)0.3,close_color) == false) {
        int err_code = GetLastError();
        printf("決済エラー[%d],%s", err_code, ErrorDescription(err_code));
        return false;
    }
    return true;
}

//+------------------------------------------------------------------+

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です