//------------закрываем ордер по обратному сигналу удаляем или модифицируем отложки------
for(int i2=total-1; i2>=0; i2--) if(OrderSelect(i2, SELECT_BY_POS)) if(OrderSymbol()==Symbol() ) if (OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY) { if (sig2==1) {bool cl = OrderClose(OrderTicket(),OrderLots(),Bid,Slip,0);if (cl==false) {Print("OrderClose завершилась с ошибкой #",GetLastError());}}
} if (OrderType()==OP_SELL) { if (sig2==2) {bool cl = OrderClose(OrderTicket(),OrderLots(),Ask,Slip,0);if (cl==false) {Print("OrderClose завершилась с ошибкой #",GetLastError());}}
}
if (OrderType()==OP_BUYSTOP) {
if (sig2==2&&Delete_Order==true) {bool del = OrderDelete(OrderTicket());if (del==false) {Print("OrderDelete завершилась с ошибкой #",GetLastError());}}
//if (sig==1&&OrderOpenPrice()!=buystop_open&&Ask<buystop_open-stops) {bool mod = OrderModify(OrderTicket(),buystop_open,buystop_sl,0,0);Print("Мод. цены бай стоп=" ,buystop_open,", СЛ=",buystop_sl);if (mod==false) {Print("OrderModify завершилась с ошибкой #",GetLastError());}}
}
if (OrderType()==OP_SELLSTOP) {
if (sig2==1&&Delete_Order==true) {bool del = OrderDelete(OrderTicket());if (del==false) {Print("OrderDelete завершилась с ошибкой #",GetLastError());}}
//if (sig==1&&OrderOpenPrice()!=sellstop_open&&Bid>sellstop_open+stops) {bool mod = OrderModify(OrderTicket(),sellstop_open,sellstop_sl,0,0);Print("Мод. цены бай стоп=" ,sellstop_open,", СЛ=",sellstop_sl);if (mod==false) {Print("OrderModify завершилась с ошибкой #",GetLastError());}}
if(Stoch1>20 && Stoch2<20&&Stoch50_1>50) { UP[i]=Low[i]-distance*MyPoint; } //if(Stoch1<80 && Stoch2>80&&Stoch50_1<50) //{ // DOWN[i]=High[i]+distance*MyPoint; //} } //--- return value of prev_calculated for next call return(rates_total); }
你的周期很奇怪。很奇怪。
//+------------------------------------------------------------------+ if(rates_total<xxx) return(0); // xxx здесь - количество баров, при которых невозможно рассчитать индикатор int limit=rates_total-prev_calculated; if(limit>1) { // limit больше 1 в том случае, когда в истории произошли изменения limit=rates_total-1; // не обязательно -1, если в цикле есть i+1, значит limit=rates_total-2, и т.д., и т.п. // тут проводим действия когда нужно пересчитать всю историю } //--- for(int i=limit; i>=0; i--) { // основной цикл индикатора } //+------------------------------------------------------------------+
很好。你能告诉我错误在哪里吗?
extern int pointsl=100, pointtp=100, MagicB=1111, MagicS=2222, bars=10; extern double lotB=0.1, lotS=0.1;
double slB, tpB, slS, tpS; double x=0, z=0; int ticketUP, ticketD;
void OnTick()
{
double maxpr1=-9999; double minpr1=9999;
for(int shift1=0; shift1<bars; shift1++)
{double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);
if (i>maxpr1){maxpr1=i;}}
for(int shiftA1=0; shiftA1<bars; shiftA1++)
{double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);
if (y<minpr1) {minpr1=y;}}
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");
}
一切顺利,以maxpr1的价格下了一个订单。
然后我想做同样的事,但以minpr1的价格。
double slB, tpB, slS, tpS; double x=0, z=0; int ticketUP, ticketD;
void OnTick()
{
double maxpr1=-9999; double minpr1=9999;
for(int shift1=0; shift1<bars; shift1++)
{double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);
if (i>maxpr1){maxpr1=i;}}
for(int shiftA1=0; shiftA1<bars; shiftA1++)
{double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);
if (y<minpr1) {minpr1=y;}}
slS=NormalizeDouble(minpr1+pointsl*Point,5);
tpS=NormalizeDouble(minpr1-pointtp*Point,5);
ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, minpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");
}
错误130(错误停止)。我做错了什么?
当你下挂单时,开盘价不能离市场太近。也可以使用MarketInfo()函数和MODE_STOPLEVEL参数获得挂牌价与当前市场价格的最小距离(以点为单位)。如果挂单的开仓价格不正确,将产生一个错误130(ERR_INVALID_STOPS)。
不,不是这样的,差距就在那里。此外,我试图改变我的买入待定,在同一图表上测试,同样的错误。
差距就是差距,但你可能没有读懂以下所有的内容
....... 如果 挂单 的开仓价格不正确,将产生错误130(ERR_INVALID_STOPS)..........。
也就是说,你试图将OP_SELLLIMIT设置为低于市场价格。
差距就是差距,但你可能没有读懂以下所有的内容
....... 如果 挂单 的开仓价格不正确,将产生错误130(ERR_INVALID_STOPS)..........。
也就是说,你试图将OP_SELLLIMIT设置为低于市场价格。
for(int i2=total-1; i2>=0; i2--)
if(OrderSelect(i2, SELECT_BY_POS))
if(OrderSymbol()==Symbol() )
if (OrderMagicNumber()==Magic)
{
if (OrderType()==OP_BUY)
{
if (sig2==1) {bool cl = OrderClose(OrderTicket(),OrderLots(),Bid,Slip,0);if (cl==false) {Print("OrderClose завершилась с ошибкой #",GetLastError());}}
}
if (OrderType()==OP_SELL)
{
if (sig2==2) {bool cl = OrderClose(OrderTicket(),OrderLots(),Ask,Slip,0);if (cl==false) {Print("OrderClose завершилась с ошибкой #",GetLastError());}}
}
if (OrderType()==OP_BUYSTOP)
{
if (sig2==2&&Delete_Order==true) {bool del = OrderDelete(OrderTicket());if (del==false) {Print("OrderDelete завершилась с ошибкой #",GetLastError());}}
//if (sig==1&&OrderOpenPrice()!=buystop_open&&Ask<buystop_open-stops) {bool mod = OrderModify(OrderTicket(),buystop_open,buystop_sl,0,0);Print("Мод. цены бай стоп=" ,buystop_open,", СЛ=",buystop_sl);if (mod==false) {Print("OrderModify завершилась с ошибкой #",GetLastError());}}
}
if (OrderType()==OP_SELLSTOP)
{
if (sig2==1&&Delete_Order==true) {bool del = OrderDelete(OrderTicket());if (del==false) {Print("OrderDelete завершилась с ошибкой #",GetLastError());}}
//if (sig==1&&OrderOpenPrice()!=sellstop_open&&Bid>sellstop_open+stops) {bool mod = OrderModify(OrderTicket(),sellstop_open,sellstop_sl,0,0);Print("Мод. цены бай стоп=" ,sellstop_open,", СЛ=",sellstop_sl);if (mod==false) {Print("OrderModify завершилась с ошибкой #",GetLastError());}}
}
}
}
//+------------------------------------------------------------------+
如果(FRMA1>GrossMA1 && FRMA2<GrossMA2 ) {sig=1;}。//买入止损
没有任何信号可以自行关闭未平仓的交易。
如果(FRMA1>GrossMA1 && FRMA2<GrossMA2 ) {sig=1;}。//买入止损
没有退出交易的信号。
在酒吧零点,信号 "闪烁",这在事后是看不到的。对测试器中的所有刻度线运行可视化,问题会消失。
这不是问题,当订单被触发时,交易被打开,当新的蜡烛 出现且没有反向信号时,交易被立即关闭。 这就是为什么我给你一段关闭交易的代码。
你好。
你能告诉我什么是错的吗?
如果指标线 已经越过20级,在M1周期,并且指标线在50级以上,在M5周期,该图标应该被设置。
由于某些原因,即使M5上的线低于50的设定水平,该标记也被设定了。
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
Comment("");
int limit = rates_total;
int count=prev_calculated;
for(int i=limit-count; i>=1;i--)
{
//Getting Stochastic buffer values using the iCustom function
double Stoch1 = iStochastic(NULL,1,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i);
double Stoch2 = iStochastic(NULL,1,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i+1);
double Stoch50_1 = iStochastic(NULL,5,KPeriod1,DPeriod1,Slowing1,MODE_SMA,0,MODE_MAIN,i);
double Stoch50_2 = iStochastic(NULL,5,KPeriod1,DPeriod1,Slowing1,MODE_SMA,0,MODE_MAIN,i+1);
if(Stoch1>20 && Stoch2<20&&Stoch50_1>50)
{
UP[i]=Low[i]-distance*MyPoint;
}
//if(Stoch1<80 && Stoch2>80&&Stoch50_1<50)
//{
// DOWN[i]=High[i]+distance*MyPoint;
//}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
你好。
你能告诉我什么是错的吗?
如果指标线 已经越过20级,在M1周期,并且指标线在50级以上,在M5周期,该图标应该被设置。
由于某些原因,即使M5上的线低于50的设定水平,该标志也会被设置。
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
Comment("");
int limit = rates_total;
int count=prev_calculated;
for(int i=limit-count; i>=1;i--)
{
//Getting Stochastic buffer values using the iCustom function
double Stoch1 = iStochastic(NULL,1,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i);
double Stoch2 = iStochastic(NULL,1,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i+1);
double Stoch50_1 = iStochastic(NULL,5,KPeriod1,DPeriod1,Slowing1,MODE_SMA,0,MODE_MAIN,i);
double Stoch50_2 = iStochastic(NULL,5,KPeriod1,DPeriod1,Slowing1,MODE_SMA,0,MODE_MAIN,i+1);
if(Stoch1>20 && Stoch2<20&&Stoch50_1>50)
{
UP[i]=Low[i]-distance*MyPoint;
}
//if(Stoch1<80 && Stoch2>80&&Stoch50_1<50)
//{
// DOWN[i]=High[i]+distance*MyPoint;
//}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
你的周期很奇怪。很奇怪。
if(rates_total<xxx) return(0); // xxx здесь - количество баров, при которых невозможно рассчитать индикатор
int limit=rates_total-prev_calculated;
if(limit>1) { // limit больше 1 в том случае, когда в истории произошли изменения
limit=rates_total-1; // не обязательно -1, если в цикле есть i+1, значит limit=rates_total-2, и т.д., и т.п.
// тут проводим действия когда нужно пересчитать всю историю
}
//---
for(int i=limit; i>=0; i--) {
// основной цикл индикатора
}
//+------------------------------------------------------------------+
为什么限制检查超过1。例如,历史被加载,差异将大于1。如果一切正常,那么差额Rates_total-prev_calculated将是0或1。
0 - 一个新的刻度线已经到来,一个新的柱子还没有开始形成。
1 - 一个新的刻度线已经到来,一个新的条形图已经开始形成
向我们展示你的整个指标--让我们看看有什么问题。