int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {
数据时间OldCurTime。
int timeout=30。
int ticket;
OldCurTime=CurTime()。
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {
int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {
数据时间OldCurTime。
int timeout=30。
int ticket;
OldCurTime=CurTime()。
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {
嘿,mladen,还有一个问题。
我怎样才能检查所有未结订单,如果它们的利润低于-20,然后关闭它们?
像这样吗?
//int currentTicket;
for(int i0=OrdersTotal()-1; i0>=0; i0--){
//currentTicket = OrderSelect(i0, SELECT_BY_POS, MODE_TRADES)。
如果(OrderProfit() <= -20) {
OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE)。
}
}阿罗冈兹机器
是的,这应该可以了。
你可以只把检查 利润的那一行改成这样。
如果((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)
以确保你检查的是 "纯 "利润。
我必须在OrderClose时设置一个Bid或Ask吗?还是说这一行是正确的?
嗯,有一些问题。回溯测试 并没有关闭处于负利润的订单。在测试结束时,仍有利润为-230的未结订单。
int start()
{
for(int i0=OrdersTotal()-1; i0>=0; i0--){
如果((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) {
OrderClose(OrderTicket(),OrderLots(),0,0,CLR_NONE)。
}
}
}
这并不奏效。
int start()
{
for(int i0=OrdersTotal()-1; i0>=0; i0--){
如果((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) {
OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE)。
}
}
}
这并不奏效。你忘了OrderSelect()(你总是要在做任何事情之前选择订单)。另外,最好能增加检查你试图关闭的订单类型 的部分
像这样。
if (OrderSelect(u0,SELECT_BY_POS,MODE_TRADES))
if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)
{
if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);
}
谁能帮助我在TrendHistogram指标中把柱状图转换为条形图?我想获得与所附TrendFilter指标中相同的条形图。
TrendHistogram需要EMA_Adaptive指标才能正常工作。
谁能帮我在TrendHistogram指标中把柱状图转换成条形图?我想得到与附件中TrendFilter指标相同的条形图 TrendHistogram需要EMA_Adaptive指标才能正常工作
发狂
在这里,你可以
将DrawAsBars设置为 "true",它将按照你描述的方式绘制。如果你把这个参数 设为false,它将按原来的方式工作。
你好。
谁能帮我编辑一下这段代码,回测很好,但EA在模拟/真实账户 上无法工作。
//+------------------------------------------------------------------+
//| Hans123Trader v1 |
//+------------------------------------------------------------------+
#include
#property copyright "hans123"
#property link ""
//由fukinagashi编程
extern int BeginSession1=6;(在回测期间,我编辑并设置所有会话为0,因此得到了最终结果)
extern int EndSession1=10;
extern int BeginSession2=10;
外设int EndSession2=14;
外置的double TrailingStop = 0;
外部数据TakeProfit = 452;
外置双数 InitialStopLoss=40;
double Lots = 0.1;
datetime bartime = 0;
double Slippage=3;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, err, i, j, cmd;
int MagicNumber;
double ts, tp, LowestPrice, HighestPrice, Price;
bool Order[5];
字符串设置。
datetime Validity=0。
if(IsTesting() && Bars<100) return(0);
MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;
setup="H123_"+ Symbol()。
如果(bartime == Time[0]) {
返回(0)。
} else {
bartime = Time[0];
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// 对未结订单的修改 ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。
如果(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) {
如果(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
打印("。")。
OrderClose(OrderTicket(), Lots, Bid, 3, Red)。
if (err>1) { Print("错误关闭买入订单[" + setup + "]。(" + err + ") " + ErrorDescription(err)); } else if (OrderStopLocation())
} else if (OrderStopLoss()==0){
如果(TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;
} else { tp=0; }
如果(InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts, tp,0,White)。
if (err>1) { Print("Error modifying Buy order [" + setup + " ] 。(" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Bid-Point*TrailingStop。
如果(OrderStopLoss()0)OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White) 。
}
} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4) {
如果(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
打印("。")。
OrderClose(OrderTicket(), Lots, Ask, 3, Red)。
if (err>1) { Print("Error closing Sell order [" + setup + "] 。(" + err + ") " + ErrorDescription(err)); } else if (OrderStopLot())
} else if (OrderStopLoss()==0){
如果(TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;
} else { tp=0; }
如果(InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts, tp,0,White)。
if (err>1) { Print("修改卖出订单错误[" + setup + "]。(" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Ask+Point*TrailingStop。
如果(OrderStopLoss()>ts && OrderProfit()>0)OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White) 。
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// 设置订单 ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(AccountFreeMargin()<(1000*Lots)) return(0);
Validity=StrToTime(TimeYear(Time[0]) + ".+ TimeMonth(Time[0]) + "."+ TimeDay(Time[0]) + " 23:59")。
如果(TimeHour(Time[0])==EndSession1 &&TimeMinute(Time[0])==0){
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)]。
HighestPrice=High。
//// 以下是必要的,以避免BUYSTOP/SELLSTOP价格过于接近Bid/Ask。
//// 在这种情况下,我们会得到130个无效的止损。
////,我尝试改变为适当的OP_BUY和OP_SELL,但结果并不令人满意
//if (HighestPrice+5*Point<Ask+Spread*Point) {
// cmd=OP_BUY。
// Price=Ask;
//}否则 {
cmd=OP_BUYSTOP;
价格=HighestPrice+5*Point。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green) 。
err = GetLastError();
if (err>1) { Print("Error modifying Sell order [" + setup + " ] 。(" + err + ") " + ErrorDescription(err)); }
//if (LowestPrice-5*Point>Bid-Spread*Point) {
// cmd=OP_SELL。
// Price=Bid;
//}否则 {
cmd=OP_SELLSTOP。
价格=LowestPrice-5*Point。
//}
ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green) 。
err = GetLastError();
if (err>1) { Print("Error modifying Sell order [" + setup + " ] 。(" + err + ") " + ErrorDescription(err)); }
}
如果(TimeHour(Time[0])==EndSession2 &&TimeMinute(Time[0])==0){
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)]。
HighestPrice=High。
//如果(HighestPrice+5*Point<Ask+Spread*Point) {
// cmd=OP_BUY。
// Price=Ask;
//}否则 {
cmd=OP_BUYSTOP。
价格=HighestPrice+5*Point。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green) 。
err = GetLastError();
if (err>1) { Print("Error modifying Sell order [" + setup + " ] 。(" + err + ") " + ErrorDescription(err)); }
//if (LowestPrice-5*Point>Bid-Spread*Point) {
// cmd=OP_SELL。
// Price=Bid;
//}否则 {
cmd=OP_SELLSTOP。
价格=LowestPrice-5*Point。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green) 。
err = GetLastError();
if (err>1) { Print("Error modifying Sell order [" + setup + " ] 。(" + err + ") " + ErrorDescription(err)); }
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// 不同的子程序 /////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int func_Symbol2Val(string symbol) {
if(symbol=="AUDUSD") { return(01);
} else if(symbol=="CHFJPY") { return(10);
} else if(symbol=="EURAUD") { return(10);
} else if(symbol=="EURCAD") { return(11);
} else if(symbol=="EURCHF") { return(12);
} else if(symbol=="EURGBP") { return(13);
} else if(symbol=="EURJPY") { return(14);
} else if(symbol=="EURUSDm") { return(15);
} else if(symbol=="GBPCHF") { return(20);
} else if(symbol=="GBPJPY") { return(21);
} else if(symbol=="GBPUSD") { return(22);
} else if(symbol=="USDCAD") { return(40);
} else if(symbol=="USDCHF") { return(41);
} else if(symbol=="USDJPY") { return(42);
} else if(symbol=="GOLD") { return(90);
} else { Comment("unexpected Symbol"); return(0);
}
}
int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {
数据时间OldCurTime。
int timeout=30。
int ticket;
OldCurTime=CurTime()。
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {
如果(OldCurTime+timeout<=CurTime()) {
Print("OrderSendExtended()中的错误。遇到了超时")。
return(0);
}
Sleep(1000);
}
GlobalVariableSet("InTrade", CurTime()); // 设置锁定指标
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
GlobalVariableDel("InTrade"); // 清除锁定指标
return(ticket);
}
你好。
谁能帮我编辑一下这段代码,回测很好,但EA在模拟/真实账户上不工作。
//+------------------------------------------------------------------+
//| Hans123Trader v1 |
//+------------------------------------------------------------------+
#include
#property copyright "hans123"
#property link ""
//由fukinagashi编程
extern int BeginSession1=6;(在回测期间,我编辑并设置所有会话为0,因此得到了最终结果)
extern int EndSession1=10;
extern int BeginSession2=10;
外设int EndSession2=14;
外置的double TrailingStop = 0;
外部数据TakeProfit = 452;
外置双数 InitialStopLoss=40;
double Lots = 0.1;
datetime bartime = 0;
double Slippage=3;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, err, i, j, cmd;
int MagicNumber;
double ts, tp, LowestPrice, HighestPrice, Price;
bool Order[5];
字符串设置。
datetime Validity=0。
if(IsTesting() && Bars<100) return(0);
MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;
setup="H123_"+ Symbol()。
如果(bartime == Time[0]) {
返回(0)。
} else {
bartime = Time[0];
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// 对未结订单的修改 ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。
如果(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) {
如果(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
打印("。")。
OrderClose(OrderTicket(), Lots, Bid, 3, Red)。
if (err>1) { Print("错误关闭买入订单[" + setup + "]。(" + err + ") " + ErrorDescription(err)); } else if (OrderStopLocation())
} else if (OrderStopLoss()==0){
如果(TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;
} else { tp=0; }
如果(InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts, tp,0,White)。
if (err>1) { Print("Error modifying Buy order [" + setup + " ] 。(" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Bid-Point*TrailingStop。
如果(OrderStopLoss()0)OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White) 。
}
} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4) {
如果(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
打印("。")。
OrderClose(OrderTicket(), Lots, Ask, 3, Red)。
if (err>1) { Print("Error closing Sell order [" + setup + "] 。(" + err + ") " + ErrorDescription(err)); } else if (OrderStopLot())
} else if (OrderStopLoss()==0){
如果(TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;
} else { tp=0; }
如果(InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts, tp,0,White)。
if (err>1) { Print("修改卖出订单错误[" + setup + "]。(" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Ask+Point*TrailingStop。
如果(OrderStopLoss()>ts && OrderProfit()>0)OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White) 。
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// 设置订单 ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(AccountFreeMargin()<(1000*Lots)) return(0);
Validity=StrToTime(TimeYear(Time[0]) + ".+ TimeMonth(Time[0]) + "."+ TimeDay(Time[0]) + " 23:59")。
如果(TimeHour(Time[0])==EndSession1 &&TimeMinute(Time[0])==0){
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)]。
HighestPrice=High。
//// 以下是必要的,以避免BUYSTOP/SELLSTOP价格过于接近Bid/Ask。
//// 在这种情况下,我们会得到130个无效的止损。
////,我尝试改变为适当的OP_BUY和OP_SELL,但结果并不令人满意
//if (HighestPrice+5*Point<Ask+Spread*Point) {
// cmd=OP_BUY。
// Price=Ask;
//}否则 {
cmd=OP_BUYSTOP;
价格=HighestPrice+5*Point。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green) 。
err = GetLastError();
if (err>1) { Print("Error modifying Sell order [" + setup + " ] 。(" + err + ") " + ErrorDescription(err)); }
//if (LowestPrice-5*Point>Bid-Spread*Point) {
// cmd=OP_SELL。
// Price=Bid;
//}否则 {
cmd=OP_SELLSTOP。
价格=LowestPrice-5*Point。
//}
ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green) 。
err = GetLastError();
if (err>1) { Print("Error modifying Sell order [" + setup + " ] 。(" + err + ") " + ErrorDescription(err)); }
}
如果(TimeHour(Time[0])==EndSession2 &&TimeMinute(Time[0])==0){
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)]。
HighestPrice=High。
//如果(HighestPrice+5*Point<Ask+Spread*Point) {
// cmd=OP_BUY。
// Price=Ask;
//}否则 {
cmd=OP_BUYSTOP。
价格=HighestPrice+5*Point。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green) 。
err = GetLastError();
if (err>1) { Print("Error modifying Sell order [" + setup + " ] 。(" + err + ") " + ErrorDescription(err)); }
//if (LowestPrice-5*Point>Bid-Spread*Point) {
// cmd=OP_SELL。
// Price=Bid;
//}否则 {
cmd=OP_SELLSTOP;
价格=LowestPrice-5*Point。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green) 。
err = GetLastError();
if (err>1) { Print("Error modifying Sell order [" + setup + " ] 。(" + err + ") " + ErrorDescription(err)); }
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// 不同的子程序 /////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int func_Symbol2Val(string symbol) {
if(symbol=="AUDUSD") { return(01);
} else if(symbol=="CHFJPY") { return(10);
} else if(symbol=="EURAUD") { return(10);
} else if(symbol=="EURCAD") { return(11);
} else if(symbol=="EURCHF") { return(12);
} else if(symbol=="EURGBP") { return(13);
} else if(symbol=="EURJPY") { return(14);
} else if(symbol=="EURUSDm") { return(15);
} else if(symbol=="GBPCHF") { return(20);
} else if(symbol=="GBPJPY") { return(21);
} else if(symbol=="GBPUSD") { return(22);
} else if(symbol=="USDCAD") { return(40);
} else if(symbol=="USDCHF") { return(41);
} else if(symbol=="USDJPY") { return(42);
} else if(symbol=="GOLD") { return(90);
} else { Comment("unexpected Symbol"); return(0);
}
}
int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {
数据时间OldCurTime。
int timeout=30。
int ticket;
OldCurTime=CurTime()。
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {
如果(OldCurTime+timeout<=CurTime()) {
Print("OrderSendExtended()中的错误。遇到了超时")。
return(0);
}
Sleep(1000);
}
GlobalVariableSet("InTrade", CurTime()); // 设置锁定指标
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
GlobalVariableDel("InTrade"); // 清除锁定指标
return(ticket)。
}试着在真实账户上将InitialStopLoss乘以10。该EA是为4位数的经纪商编写的
______________________
PS:为了保持一致,你也应该把TakeProfit乘以10,并把它作为点数,但如果你用这些数字进行测试,你将不会得到与回测时相同的结果(只是因为回测允许你使用这两个数值,而模拟账户 和真实账户都不允许你这样做)。
zigflip 最后两个psar是指 "最后的上/下一对psar "还是 "最后的2条"?
对不起,我想我已经订阅了电子邮件,但是......。
我是说最后一对psar!
我主要是想监控最后一个psar,但当上/下限变化发生时,我需要最后两个级别,嗯,也许应该是x条的后面......唉,我现在明白你的意思了,再想想也许是最后一组上/下限,在第一个新方向psar到来时,修剪到最后的变化!
谢谢你的帮助。