[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 277

 

是的,确实如此。看了一下,但没有看到。

谢谢。(笑)。

我今天放慢了速度。得为周末休息了。

 
rid >> :

那是差不多的 --



谢谢你!!!。我将使用....

 


DDFedor



Rid



谢谢你。

 

所有这些,代码没有工作,做了所有的行动,在2个蜡烛。不得不学习的位置已经有更多的不打开...因为它在所有打开,我可以所有的存款使用((Rid看看也许你需要添加什么...将非常感激

 

帮助。我想要一个能在夜间交易的EA。我正在编写代码

int start()
{
string Symb;
Symb=Symbol();
string Vremya;
Vremya=TimeToStr(TimeLocal(),TIME_MINUTES);
if(Vremya > 23:00 || Vremya < 06:00 )
{
// тут торговые функции
}
}

它产生了一个错误

'||' - 条件不能是一个字符串

而如果将条件缩短为

如果(Vremya > 23:00)

它将发挥作用。

而如果去到

如果(Vremya < 06:00 )

它不会工作。


我不明白什么是错的。你能告诉我如何设置时间吗?


 
morok >> :

Rig Rig反正也没有用......但我应该知道我有一个姿势,不要再打开它......但我为我得到的整个存款打开了它。

是的,确实....

我忘了在ORDERSEND fi中设置magik。

现在工作正常了。已检查。市场上不能有超过两个不同方向的交易,也不能有超过一个单向的交易。

如果不需要任何类型的交易,在f-ki NumberOfPositions(c)中需要用-1(减一)来代替交易的类型。

extern int   Magic = 777;
extern int       Ema1=14;
extern int       Ema2=48;
double Ema_1;
double Ema_2;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   //int Orders = OrdersTotal(); 
   Ema_1 =iMA(NULL, 0, Ema1, 0,MODE_SMMA, PRICE_MEDIAN, 0);
   Ema_2 =iMA(NULL, 0, Ema2, 0,MODE_SMMA, PRICE_MEDIAN, 0);   
   int ticket;
//------------------------------------------------
 if ( NumberOfPositions(NULL,OP_BUY, Magic)< 1 && Ema_1> Ema_2) 
    {
      ticket=OrderSend(Symbol(),OP_BUY,0.5,Ask,10,Ask-850*Point,Ask+550*Point,"kupil", Magic,0,Green);
    } 
//------------------------------------------------------
   if ( NumberOfPositions(NULL,OP_SELL, Magic)< 1 && Ema_1< Ema_2) 
    {
      ticket=OrderSend(Symbol(),OP_SELL,0.5,Bid,10,Ask+850*Point,Bid-550*Point,"kupil", Magic,0,Violet);
    } 
//------------------------------------------------------
   return(0);
  }

//жжжжжжжжж Пользовательские функции жжжжжжж

int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++)                                    {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()== sy || sy=="")                   {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op)                   {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}
  return( kp);
}




 
alderru >> :

请告诉我iTime 功能显示什么。

那10位数的胡言乱语是什么?秒钟?

你如何将它们翻译成年-月-日-时-分?

>> 像这样:只需设置条形移位,得到默认的时间和日期(如果时间=1或真,你只得到时间)。

非常方便的功能,我推荐它。

string Times(int Sdvig, bool time=0)
{//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  string YAER   = TimeYear( Time[ Sdvig]);
  string DAY    = TimeDay( Time[ Sdvig]);
  string HOUR   = TimeHour( Time[ Sdvig]);
  string MINUTE = TimeMinute( Time[ Sdvig]);
  int month = TimeMonth( Time[ Sdvig]);
  string MONTH;
  switch( month)
    {case 1: MONTH = "янв ";break;
     case 2: MONTH = "фев ";break;
     case 3: MONTH = "март";break;
     case 4: MONTH = "апр ";break;
     case 5: MONTH = "май ";break;
     case 6: MONTH = "июнь";break;
     case 7: MONTH = "июль";break;
     case 8: MONTH = "авг ";break;
     case 9: MONTH = "сен ";break;
     case 10: MONTH = "окт ";break;
     case 11: MONTH = "нояб";break;
     case 12: MONTH = "дек ";break;              
     default: MONTH = "----";break;
    }
 if(TimeHour( Time[ Sdvig])<10) HOUR= "0"+ HOUR;     
 if( MINUTE=="0") MINUTE="00";
 if( time)return( HOUR+":"+ MINUTE);                   
 else return( YAER+"   "+ MONTH+" "+ DAY+"   "+ HOUR+":"+ MINUTE);
}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

我试图调整第二层,但没有成功。

我试图这样做,但它会在测试后立即打开和关闭一个订单。

extern int   Magic = 777;
extern int       Ema1=14;
extern int       Ema2=48;
extern int       Ema3=100;
double Ema_1;
double Ema_2;
double Ema_3;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   //int Orders = OrdersTotal(); 
   Ema_1 =iMA(NULL, 0, Ema1, 0,MODE_SMMA, PRICE_MEDIAN, 0);
   Ema_2 =iMA(NULL, 0, Ema2, 0,MODE_SMMA, PRICE_MEDIAN, 0);
   Ema_3 =iMA(NULL, 0, Ema3, 0,MODE_SMMA, PRICE_MEDIAN, 0);     
   int ticket;
//------------------------------------------------
 if ( NumberOfPositions(NULL,OP_BUY, Magic)< 1 && Ema_1> Ema_2 && Ema_2> Ema_3) 
    {
      ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,10,0,0,"kupil", Magic,0,Green);
    } 
//------------------------------------------------------
   if ( NumberOfPositions(NULL,OP_SELL, Magic)< 1 && Ema_1< Ema_2 && Ema_2< Ema_3) 
    {
      ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,10,0,0,"kupil", Magic,0,Violet);
    } 
//--------------------------------------------------------
 if ( NumberOfPositions(NULL,OP_BUY, Magic)>= 1 && Ema_1< Ema_2) //--проверяю есть ли ордер BUY и крою его если линии ема пересеклись
    {
      ticket=OrderClose(OrderTicket(),0.1,Bid,300,Violet);
    } 
//------------------------------------------------------
 if ( NumberOfPositions(NULL,OP_SELL, Magic)>= 1 && Ema_1> Ema_2) //--проверяю есть ли ордер SEll и крою его если линии ема пересеклись
    {
      ticket=OrderClose(OrderTicket(),0.1,Ask,300,Green);
    } 
//------------------------------------------------------
   return(0);
  }

//жжжжжжжжж Пользовательские функции жжжжжжж

int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++)                                    {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()== sy || sy=="")                   {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op)                   {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}
  return( kp);
}
 
rid писал(а)>>

明白了。为了确定历史上是否有职位,你可以这样做。

但这样你的代码就只能在测试器中工作。否则,你将不得不在每次打开EA在线时改变魔力。


没错,这正是我们所需要的!

请告知如何在这个网格中正确插入这个代码。

(如果我直接放,测试器就会在第一个位置的开口处停止)

for (int i=0; i< OrdersTotal(); i++)                          {

    if (!(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY ))) continue;

//выбираем из истории счета

    if (OrderSymbol() != Symbol()) continue;    

     if ( OrderMagicNumber()== Magic)                            {

              позиции = true;

                                                             }}



//Открытие позиции:



bool Open_Buy() {

   bool res=false; 

if( условие_1)      {

            if ( советник еще не открывал позиций с Магическим номером)    {

                    res=true;     }}

else    {

    if( условие_1)       { 

   if ( условие_2 опирается на данные прошлого ордера)       { 

   res=true;     }}}

return( res);

}
 
morok >> :

我试图调整第二层,但没有成功。

这似乎是很合理的,但在测试中,它同时打开和覆盖订单

我在这里的时候处理过平仓的问题------。

https://www.mql5.com/ru/forum/105913

//==================Закрытие позиций ============================
 
//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect( v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol()&& OrderMagicNumber()== Magic)      { 
//-----------------------------------------------------                  
if(OrderType()== OP_BUY) { // если открыта бай-позиция                                   
  if( вот здесь вставляй свои условия закрытия)  {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,Вlack); // закрываем позицию
                                 }       
                               }  
 //--------------------------------------------------------
if(OrderType()== OP_SELL) { // если открыта селл-позиция 
 if( вот здесь вставляй свои условия закрытия)    {
   OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); // закрываем позицию
                     }       
                   }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
//------------конец блока закрытия позиций-----------------

这个区块必须插入START函数中,也许在最开始,就在计算完Ema_1,Ema_2,Ema_3之后。
而且,很明显,有必要让顾问通过PRICES OPEN来工作,否则MA交叉将不断地在几乎每个tick上关闭未结头寸。

而你所做的方式--将无法正确地在线工作,因为EA将关闭所有的头寸,即使是由另一个EA或手动打开的头寸。

但我已经写过如何使它变得更简单。在开仓时,不需要NumberOfPositions(NULL,OP_BUY,Magic),也不需要NumberOfPositions(NULL,OP_SELL,Magic),只要设置

NumberOfPositions(NULL,-1,Magic)

然后在市场上一直不会有超过一个位置。没有任何闭合块。

原因: