首页 > 解决方案 > 关于 MQL5,如何关闭交易并进入交易

问题描述

在下面的代码中,我想在我放置加号的地方打开卖出之前关闭所有未平仓的买入交易。我想在我放星号的地方打开买入之前关闭所有未平仓的卖出交易。
拜托,谁能帮我写代码?预先感谢您的帮助

#include <Trade\Trade.mqh>
CTrade trade;

input double MyLotSize = 0.01;

void OnTick()
{
   double myMovingAverageArray1[],myMovingAverageArray2[];
   int movingAverageDefinition1 = iMA (_Symbol,_Period, 20,0,MODE_EMA,PRICE_CLOSE);
   int movingAverageDefinition2 = iMA (_Symbol,_Period, 50,0,MODE_EMA,PRICE_CLOSE);

   ArraySetAsSeries(myMovingAverageArray1,true);
   ArraySetAsSeries(myMovingAverageArray2,true);

   CopyBuffer(movingAverageDefinition1,0,0,3,myMovingAverageArray1);
   CopyBuffer(movingAverageDefinition2,0,0,3,myMovingAverageArray2);

   if((myMovingAverageArray1[0]>myMovingAverageArray2[0])&&(myMovingAverageArray1[1]<myMovingAverageArray2[1]))
   {
      double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
      Comment ("BUY");

***********************************************************   
      trade.Buy(MyLotSize,NULL,Ask,0,(Ask+60 * _Point),NULL);
   }
   if((myMovingAverageArray1[0]<myMovingAverageArray2[0])&&(myMovingAverageArray1[1]>myMovingAverageArray2[1]))
   {
      double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
      Comment ("SELL");

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
      trade.Sell(MyLotSize,NULL,Bid,0,(Bid-60 * _Point),NULL);    
   }
}

标签: mql5

解决方案


尝试以下 -

void TryToClose(long type){
   if(!PositionSelect(_Symbol))return;
   if(PositionGetInteger(POSITION_TYPE)!=type)return;
   trade.PositionClose(_Symbol);
}

add `TryToClose(POSITION_TYPE_BUY)` before opening a sell order.

推荐阅读