아이디어 제공자 — John Smith, MQL5 코드 작성자 — barabashkakvn.
이 EA는 H1 타임프레임에서 USDJPY 거래에 맞게 설정되어 있습니다.
이 시스템 트레이딩은 두 개의 이동 평균, 하나의 MACD 및 하나의 CCI를 사용합니다. OnTradeTransaction 함수를 통해 포지션 개시 시간을 확인합니다.
모든 지표 값은 인덱스가 1인 바에서 사용됩니다.
//--- 지표 설정 CAMELHIGHP1=iMAGet(handle_iMA_PRICE_HIGH,1); CAMELLOWP1=iMAGet(handle_iMA_PRICE_LOW,1); // MACDSP1=iMACDGet(SIGNAL_LINE,1); MACDSP2=iMACDGet(SIGNAL_LINE,2); // MACDHP1=iMACDGet(MAIN_LINE,1); MACDHP2=iMACDGet(MAIN_LINE,2); // CCIP1=iCCIGet(1);
적절한 제어가 이루어져서 현재 바에서 이미 포지션이 열려 있는지를 확인합니다. 이를 통해 모든 포지션을 점검할 필요가 없으며, 다른 EA가 동일한 거래 계좌에서 실행되고 있을 수 있습니다.
포지션 개시 시간은 OnTradeTransaction에서 제어됩니다. 포지션 종료가 기록되면, 개시 시간이 초기화됩니다:
//+------------------------------------------------------------------+ //| 거래 트랜잭션 함수 | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- 거래 유형을 열거형 값으로 가져오기 ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- 거래가 히스토리에 추가된 결과일 경우 if(type==TRADE_TRANSACTION_DEAL_ADD) { long deal_entry =0; long deal_time =0; string deal_symbol =""; long deal_magic =0; if(HistoryDealSelect(trans.deal)) { deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_time=HistoryDealGetInteger(trans.deal,DEAL_TIME); deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL); deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC); } else return; if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) { if(deal_entry==DEAL_ENTRY_OUT) { m_last_close_time=(datetime)deal_time; } else if(deal_entry!=DEAL_ENTRY_OUT) { m_last_close_time=0; } } } }