// в OnTick()double open_nzdusd_CUR=GetNormalizeOpenPriceBySymbol("NZDUSD",Period(),0); // цена открытия текущей свечи NZDUSDdouble open_audusd_M15=GetNormalizeOpenPriceBySymbol("AUDUSD",PERIOD_M15,1); // цена открытия прошлой свечи AUDUSD на M15//+------------------------------------------------------------------+// функция вне тела OnTick()//+------------------------------------------------------------------+double GetNormalizeOpenPriceBySymbol(string sy, int timeframe, int shift) {
int digits=(int)SymbolInfoInteger(sy,SYMBOL_DIGITS);
return(NormalizeDouble(iOpen(sy,timeframe,shift),digits));
}
//+------------------------------------------------------------------+
随着开幕,这里只是概念本身。
string symbol="AUDUSD";
double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);
double bid=SymbolInfoDouble(symbol,SYMBOL_BID);
double pt=SymbolInfoDouble(symbol,SYMBOL_POINT);
int spread=(int)SymbolInfoInteger(symbol,SYMBOL_SPREAD);
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
int value=(int)SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL);
int level=(value==0)?spread*2:value;
//---double sl_b=(StopLoss==0)?0:NormalizeDouble(fmin(ask-StopLoss*pt,ask-(level+1)*pt),digits);
double tp_b=(TakeProfit==0)?0:NormalizeDouble(fmax(ask+TakeProfit*pt,ask+(level+1)*pt),digits);
ticket_b=OrderSend(symbol,OP_BUY,Lots,ask,3,sl_b,tp_b,"",0,0,clrGreen);
//---double sl_s=(StopLoss==0)?0:NormalizeDouble(fmax(bid+StopLoss*pt,bid+(level+1)*pt),digits);
double tp_s=(TakeProfit==0)?0:NormalizeDouble(fmin(bid-TakeProfit*pt,bid-(level+1)*pt),digits);
ticket_s=OrderSend(symbol,OP_SELL,Lots,bid,3,sl_s,tp_s,"",0,0,clrRed);
你好。有什么建议吗? 我想在下完挂单后,根据第一根柱子的低点和高点分别计算买入和卖出的StopLoss。但我没有得到任何结果,只有130个错误,仅此而已。预先感谢你。
检查OrderOpenPrice()是否离SL太近,以及止损是否 "在价格的右边"。你可以在这里 阅读。
止损和止盈价格不能离市场太近。以点为单位的最小止损距离可以通过MarketInfo() 函数和MODE_STOPLEVEL参数获得。如果出现错误的或不正常的停止,将产生错误130(ERR_INVALID_STOPS)。
在这种情况下,也就是说,对于一个挂单,"市场 "是其 "挂单价格"。
你能告诉我如何从MT获得计算机的当前ip地址吗?
在策略测试器中,命令MarketInfo(Symbol(),MODE_TICKVALUE) = 0(!) 这种情况发生在,例如,工具是EURUSD,平衡货币是RUR....。和其他组合中。我的理解是,平衡货币必须与货币对中第二种货币的名称相同。否则,它将返回零值(在策略测试器中),这使得它无法用所需的组合进行测试。如何解决这个问题?
在策略测试器中,命令MarketInfo(Symbol(),MODE_TICKVALUE) = 0(!) 这种情况发生在,例如,工具是EURUSD,平衡货币是RUR ....和其他组合中。我的理解是,平衡货币必须与货币对中第二种货币的名称相同。否则,它将返回零值(在策略测试器中),这使得它无法用所需的组合进行测试。如何解决这个问题?
突出显示的内容不正确!我是用欧元兑美元、英镑兑美元等 来计算的。只有在开启时,它才可能在第一个数据之前给出0,这就是为什么我在用TICKVALUE计算之前放了一个条件,如果!=0。
在测试器中,MarketInfo() 可能不起作用,所以在知道一个tick的大致价格后,我用IsTesting()||IsOptimization()||IsVisualMode()这个条件来设置它。
请帮助我创建能同时在两个货币对上进行交易的猫头鹰。
如果在第一对中,变量将是这样的
double a = NormalizeDouble(iOpen(NULL,PERIOD_CURRENT, 0), Digits);
第二件事将如何进行?
或者按第一个字符打开一个交易的代码将是
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Green);
第二个符号的代码将看起来像什么
请帮助我创建一个可以同时交易两个货币对的铲子。
如果在第一对中,变量将是这样的
double a = NormalizeDouble(iOpen(NULL,PERIOD_CURRENT, 0), Digits);
第二件事将如何进行?
或者按第一个字符打开一个交易的代码将是
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Green);
第二个符号的代码将看起来像什么
请帮助我创建一个可以同时交易两个货币对的铲子。
如果在第一对中,变量将是这样的
double a = NormalizeDouble(iOpen(NULL,PERIOD_CURRENT, 0), Digits);
第二件事将如何进行?
或者按第一个字符打开一个交易的代码将是
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Green);
第二个符号的代码将看起来像什么
随着开幕,这里只是概念本身。
没有检查贸易服务器的返回代码。