mql5 - 关于 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);
}
}
解决方案
尝试以下 -
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.
推荐阅读
- c - 输入所需的骰子数后,我的 Yatzee 游戏代码将无法继续运行?
- java - 从多个孩子 Android Firebase 中检索同一个孩子
- python - 从多个子进程 Popens 一起捕获所有 stderr 数据
- java - List.of 和 List.copyOf 方法
- python - 进出 ModernGL 缓冲区的 Numpy 数组(使用 cv2 打开和保存)
- r - 查找 x 年第 x 周的第一天
- recursion - x86 汇编编程:递归函数溢出堆栈
- python - Tensorflow 在 CPU 而非 RTX 3000 系列 GPU 上训练
- r - 错误:错误的回归模型类型,在 R 中使用 train()
- javascript - 8.14.4:求和网格 CodeHS