[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 69

 
请谁看看我以前的帖子(在第67页)。我找不到这个错误--挂单 没有被设置。
 
nemo811:
请谁看看我以前的帖子(在第67页)。我找不到这个错误--挂单没有被设置。

这一点没有错。你应该更加小心。

#property copyright "Copyright © 2010, Хлыстов Владимир"
#property link "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0; //уровень выставления SL, если 0, то SL не выставляется
extern int takeprofit = 0; //уровень выставления TP, если 0, то TP не выставляется
extern int Magic = 123456; //уникальный номер ордера
extern bool BUY = false; //открыть ордер BUY
extern bool SELL = false; //открыть ордер SELL
extern bool BUYSTOP = false; //открыть ордер BUYSTOP
extern bool SELLSTOP = false; //открыть ордер SELLSTOP
extern double Lot = 0.1; //объем ордера
extern int slippage = 3; //Максимально допустимое отклонение цены для рыночных ордеров
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; 
OPENORDER ("Buy");
}
if (SELL)
{ 
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0; 
OPENORDER ("Sell");
}
if (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; 
OPENORDER ("Buy Stop");
}
if (SELLSTOP)
{ 
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0; 
OPENORDER ("Sell Stop");
}
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err;
while (true)
{ error=true;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"BUY",Magic,0,Blue);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,"SELL",Magic,0,Red);
if (ord=="BuyStop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask,Digits),SL,TP,"BUYSTOP",Magic,0,Blue);
if (ord=="SellStop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid,Digits),SL,TP,"SELLSTOP",Magic,0,Red);
if (error==-1) //неудачная покупка OK
{ 
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
if (error || err >10) return;
}
return;
} 
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError();
switch ( err )
{ 
case 1: return;
case 2: Alert("Нет связи с торговым сервером ",Symbol());return;
case 3: Alert("Error неправильные параметры ",Symbol());return;
case 130: Alert("Error близкие стопы Ticket ",Symbol());return;
case 134: Alert("Недостаточно денег ",Symbol());return;
case 146: Alert("Error Подсистема торговли занята ",Symbol());return;
case 129: Alert("Error Неправильная цена ",Symbol());return;
case 131: Alert("Error Неправильный объем ",Symbol());return;
case 4200:Alert("Error Объект уже существует ",Symbol());return;
default: Alert("Error ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------
 
gince:

这一点没有错。你需要更加小心


不,不,不,不。你看错帖子了。下面还有一个:))。你所检查的版本没有指定从当前价格 开始的水平(只有当前价格),在这个水平上应该设置摆锤。谢谢你的反馈。
 
nemo811:

不,不,不。你看错了一个帖子。下面还有一个:))。你检查的版本没有显示从当前价格开始的水平(它只显示当前价格),在这个水平上应该设置悬赏。谢谢你的反馈。

与OPENORDER()函数调用 或该函数本身有关。

它的工作原理是这样的

如果 (BUYSTOP)

{

如果(takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); 否则TP=0。

如果(stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); 否则 SL=0;

int error=OrderSend(Symbol(,OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slipage,SL,TP,"",Magic,0);

}

 
gince:

与OPENORDER()函数调用或该函数本身有关。

它的工作原理是这样的

如果 (BUYSTOP)

{

如果(takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); 否则TP=0。

如果(stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); 否则SL=0;

int error=OrderSend(Symbol(,OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slipage,SL,TP,"",Magic,0);

}


我已经过了十次了!为什么它不工作?最主要的是市场开放。待定的是根据完全相同的原则写的。它缺少什么呢?:)))))))
 

请告知如何将TrailingStopFrCnSAR_v2插入专家顾问中,这在教程中有所描述?

我如何禁用订单跟踪,以便在另一个EA下挂单 或开单时发挥作用?

附加的文件:
 

Urrrrrrra!!!!!!!!发现了这个错误!

如果有人感兴趣,这里有一个工作版本。

#property copyright"Copyright © 2010, Khlystov Vladimir"
#p

roperty link "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0; // SL的暴露程度,如果是0,SL就不暴露。
extern int int takeprofit = 0; //t TP水平,如果是0,TP没有被展示。
extern int int Magic = 123456; //一个订单的号码
外部 bool BUY = false; //打开BUY订单
外部 bool SELL = false; //打开卖出订单
外部 bool BUYSTOP = false; //开启BUYSTOP订单
外部 bool SELLSTOP = false; //打开SELLSTOP订单
外部双数 Lot = 0.1; // 订单量
外置 int slippage = 3; //市场订单的最大允许价格偏差
外部int DistanceSet = 20; //市场距离
//--------------------------------------------------------------------
双重SL,TP。
//--------------------------------------------------------------------
int start()
{
如果(购买)
{
如果(takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); 否则TP=0。
如果(stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); 否则 SL=0;
OPENORDER("购买")。
}
如果 (SELL)
{
如果(takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); 否则TP=0。
如果(stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); 否则 SL=0;
OPENORDER("卖出")。
}
如果 (BUYSTOP)
{
如果(takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); 否则TP=0。
如果(stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); 否则 SL=0;
OPENORDER("买入停止")。
}
如果(SELLSTOP)
{
如果(takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); 否则TP=0。
如果(stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); 否则 SL=0;
OPENORDER("卖出止损")。
}
return(0);
}
//--------------------------------------------------------------------
空白的OPENORDER(string ord)。
{
int error,err;
while (true)
{ error=true;
如果(ord=="Buy" ) error=OrderSend(Symbol(,OP_BUY, Lot,NormalizeDouble(Ask,Digits),slipage,SL,TP,"",Magic,0);
如果(ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slipage,SL,TP,",Magic,0);
if (ord=="Buy Stop" ) error=OrderSend(Symbol(,OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slipage,SL,TP,",Magic,0);
如果(ord=="Sell Stop") error=OrderSend(Symbol(,OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slipage,SL,TP,",Magic,0);
如果(error==-1)//失败
{
ShowERROR()。
err++;Sleep(2000);RefreshRates()。
}
如果(错误||err >10)返回。
}
返回。
}
//--------------------------------------------------------------------
空白的ShowERROR()
{
int err=GetLastError()。
switch ( err )
{
情况1:返回。
case 2: Alert("No connection to trade server" ,Symbol());return;
case 3: Alert("Error incorrect parameters",Symbol());return;
case 130: Alert("Error close Ticket stops",Symbol()); return;
case 134: Alert("Not enough money",Symbol());return;
case 146: Alert("Error Trade Subsystem is busy",Symbol()); return;
case 129: Alert("Error Wrong price",Symbol());return;
case 131: Alert("Error Incorrect volume",Symbol()); return;
case 4200:Alert("Error Object already exists",Symbol());return;
默认:Alert("Error",err," ",Symbol());返回。
}
}
//--------------------------------------------------------------------

非常感谢每一位参与讨论的人!!。没有你,哪里都不行!:)))))

 
nemo811:

Urrrrrrra!!!!!!!!发现错误了!


衷心感谢所有参与讨论的人!!。没有你,哪里都不行!:)))))

你的代码中仍然有一个错误。

记住:挂单中的止损和止盈不是从当前价格算起,而是从订单的开盘价格 算起。

 

帮助!请告诉我,如果我关闭部分头寸(例如订购1手,并关闭0.5手),OrderClose票应该改变?我的测试员说它是...如何避免它?下面是一段用于关闭的代码...

1 2011.01.31 06:57 卖出 1 2.55 1.36177 0.00000 0.00000 0.00 10000.00
2 2011.01.31 08:10 收盘 1 0.51 1.36039 0.00000 0.00000 70.38 10070.38
3 2011.01.31 08:10 卖出 2 2.04 1。36177 0.00000 0.00000 0.0000 10070.38
4 2011.01.31 08:10 close 2 0.40 1.36038 0.00000 0.00000 55.60 10125.98
5 2011.01.31 08:10 sell 3 1.64 1.36177 0.00000 0.00000 0.00000 10125.98

另一个问题:我想把我的订单分成4部分,并在Cls_S==true触发时关闭每个部分。我试图用反...不起作用...

谁能给我一个主意?

预先感谢!!!!

if (Tip==1 && ((Cls_S0==true&&TotClS==0)|(Cls_S1==true&&TotClS==1)
||(Cls_S2==true&&TotClS==2)|(Cls_S3==true&&TotClS==3)) //一个卖单已经开始。
{ // 有一个标准来关闭它
Alert("Attempting to close 0.2 Lot Sell ",Ticket," 。等待回复...");
RefreshRates(); //刷新数据
Ans=OrderClose(Ticket,LotCt,Ask,5)。

如果(Ans==true) // 成功了 :)
{
TotClS++;
Alert ("Closed 0.2 Lot Sell " ,Ticket);
break; // Exit from closed loop
}
if (Fun_Error(GetLastError())==1) // Error handling
continue; // Retry
return; // Exit from start()
}
break; // Exit while

 
gince:
我临时画了一个flag[]缓冲区--它是空的,但为什么?我的错误在哪里?
我不知道。谢尔盖耶夫知道,他说这似乎是正确的。我还想看看如何正确书写。
我只是稍微纠正了一下,让它能显示一些东西。
- 我把指标放在一个单独的窗口里,然后你可以把它放回去。

- 数组macd[]被悬挂在空中,使其成为一个指标,增加了准确性。
- 把你的复杂条件固定下来,放一个简单的来调整
- 改变了标志的条件,所以至少它是有效的。

然后你可以逐渐引入条件,你会立即看到错误在哪里。

附加的文件: