[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 47

 
PapaYozh:


不,不是的。情况变得更加糟糕了 :)

理解,RefreshRates()更新了预定义的 Ask和Bid变量的值,你使用的是曾经存储在Price变量中的值。


明白了 :-)我以为只有当这个函数中的执行达到OrderSend时才会访问Price。

 int OpenPosition(string AdvisorName,int Position,int Magic,double Lots,double StopLoss){ 
 int N; int Сount = 5; int Slippage = (CalculateSpread() * 2); double Price;
 string PeriodString = GetPeriod(Period());
 if(Position == OP_BUY){
 string OrderName = StringConcatenate(AdvisorName," - Покупка по рынку");
 string ErrorName = "Ошибка открытия ордера на покупку";
 string CriticalErrorName = "Невозможно открыть ордер на покупку";
 string MailCriticalErrorName = "Ошибка открытия"; color Arrow = Gold;}
 if(Position == OP_SELL){
 OrderName = StringConcatenate(AdvisorName," - Продажа по рынку"); ErrorName = "Ошибка открытия ордера на продажу";
 CriticalErrorName = "Невозможно открыть ордер на продажу";
 MailCriticalErrorName = "Ошибка открытия"; Arrow = YellowGreen;}
 
 while(IsTradeContextBusy() || !IsTradeAllowed()){int Interval = MathRand()+1000; 
 Print("Торговый поток занят. Повторная проверка через "+DoubleToStr((Interval/1000),0)+" сек"); 
 Sleep(Interval);} while(N < Сount){
 if(Position == OP_BUY){RefreshRates(); Price = NormalizeDouble(Ask,Digits);}
 if(Position == OP_SELL){RefreshRates(); Price = NormalizeDouble(Bid,Digits);}
 int Ticket = OrderSend(Symbol(),Position,Lots,Price,Slippage,StopLoss,0,OrderName,Magic,0,Arrow);
 if(Ticket > 0){if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)){int Flag = 1; 
 PlaySound("recharge.wav"); break;}}
 else{Flag = 0; int PRM = GetLastError(); string ERR = Error(PRM,"OrderSend()"); 
 ErrorProcessing(AdvisorName+" "+PeriodString,ErrorName+" "+PRM+" ("+
 Error(PRM,"OrderSend()")+")","","OrderSend()"); N++; Sleep(5000);}
 if(N == Сount){ErrorProcessing(AdvisorName+" "+PeriodString,CriticalErrorName,
 MailCriticalErrorName+" "+PRM+" ("+Error(PRM,"OrderSend()")+")","OrderSend()");}}
 return(Flag);}
现在看来是对的,不是吗?))。
 
Dimoncheg:


明白了:-)我以为只有当这个函数中的执行达到OrderSend时才会访问Price。

现在看来是正确的,对吗?))


我想是的。
 
int BlackOrWhite(int countbar)
{
int result_=0;
 
if (iClose(NULL,0,countbar)-iOpen(NULL,0,countbar))
result_=1;
else
result_=-1;
 
if (iOpen(NULL,0,countbar)==iClose(NULL,0,countbar))
result_=0;
 
return(result_);
}

函数,由于某种原因只给出一个值+编译器发誓。

'iClose' - 预期的比较表达式

我不明白什么是错的。

if(BlackOrWhite(1)>0)
      {
所以在节目中使用它。
 
nuan:

函数,由于某种原因只给出了一个值+编译器皱眉。

'iClose' - 预期的比较表达式

我不明白什么是错的。

这是我在应用中的使用方法。



if (iClose(NULL,0,countbar)-iOpen(NULL,0,countbar)>0)
   result_=1;
else
   result_=-1;

或者说是这样的

if (iClose(NULL,0,countbar)>iOpen(NULL,0,countbar))
   result_=1;
else
   result_=-1;
 
PapaYozh:

我想是的。

一切似乎都在运作,谢谢你。
 
非常感谢你。
 

你好。我需要一些帮助。问题是这样的。

在一个订单被触发后,无论如何都需要关闭所有其他订单。再按条件,新的应该打开。

 
sergey_r:

你好。我需要一些帮助。问题是这样的。

在一个订单被触发后,无论如何都需要关闭所有其他订单。再按条件,新的应该打开。


这时 你读过课本吗?
 

到目前为止,我已经使用了

static bool order_opened = false。

如果(order_opened){return(0);}。

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Blue);
Alert (GetLastError()); //下单的错误信息
order_opened = true; //如果订单成功,不要再打开

现在我们只需要在订单成功后开一个新的订单。


 
sergey_r:

到目前为止,我已经使用了

static bool order_opened = false。

如果(order_opened){return(0);}。

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Blue);
Alert (GetLastError()); //下单的错误信息
order_opened = true; //如果订单成功,不要再打开

现在我们只需要在订单成功后开一个新的订单。



阅读教程和文档,通过姿势条件改变打开、关闭的逻辑,通过CTRL+ALT+M插入代码