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

 
Michey25 >>:

что тут не так?

Короче этот советник я прикрепляю к часовому графику, и если цена в начале часа выше чем cn1 а текущая не привышает её на 8 пунктов то ордер должен открыться (также если цена ниже текущего уровня) А он у меня почему-то сразу открывает позицию. Почему?

那么8点条件写在哪里呢? 最好是用MarketInfo(NULL,MODE_POINT)乘以8。

 
splxgf >>:

А где записано условие на 8 пунктов? лучше восемь умножать на MarketInfo(NULL,MODE_POINT);

(a-cn1)<0.0008)

 
帮助我合并两个EA.专家PYLOSE在给定金额时关闭具有一定MAGIKOM的订单,而EA Trailing在达到给定金额时跟踪股权.帮助我在PYLOSE中插入一些Trailing的代码,它也跟踪,但在达到指定金额时不关闭具有给定MAGIKOM的订单.并可能对屏幕上显示的跟踪资金进行评论.感谢!
附加的文件:
archive_1.zip  10 kb
 

Michey25


当我在回答时,代码有点不同;)

虽然有一些问题,但op(0)的结果在很大程度上取决于当前的时间框架。不清楚cn来自哪里,它们是什么类型。

你就不能让Alert(Open[0],cn1,Open[0]<cn1,a,(a-cn1)<0.0008)?

另外,最好使用break而不是i=1,这将立即退出循环,而不是将所有命令运行到最后。

int i=0;
   double a,b;
   while (i==0)
   {
     a=MarketInfo("USDCAD", MODE_ASK);
     b=MarketInfo("USDCAD", MODE_BID); 
     if((Open[0]<cn1)&&((a-cn1)<0.0008))
      {
       OrderSend("USDCAD",OP_BUY,1,a,1,SL,cn2);
       i=1;
       }
     if((Open[0]>cn11)&&((cn11-b)<0.0008))
      {
       OrderSend("USDCAD",OP_SELL,1,b,1,SL1,cn21);
       i=1;
      }  
   }
 

你好。请帮助我实现以下事情。在一个EA中,有2个独立的条件,根据这些条件分别开立订单,每个订单都有自己的魔力。在一个图表的任何时候,每个条件都只能有一个订单,而且它们可以在同一时间相互配合。为了检查开立订单的可能性,我做了以下结构

int CalculateCurrentOrders(string symbol)
  {
   int buys=0, sells=0, buystop=0, sellstop=0;
//----
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && (OrderMagicNumber()== MAGIC1 || OrderMagicNumber()== MAGIC2))
              {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
          if(OrderType()==OP_BUYSTOP)  buys++;
         if(OrderType()==OP_SELLSTOP) sells++;
        }
     }
//----
   if( buys>0) return( buys);
   else       return(- sells);

但是,订单只用第二个魔法就能打开。

然后,这些订单也被独立关闭。 同时,有第一个法宝的订单使用拖网,而第二个法宝不使用拖网。

我使用了这个例子,但关闭要么没有按照第一个或第二个条件的规则发生,要么根本就没有发生。

 

  for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1)
     if(OrderType()==OP_BUY) 
     if ( Sell1==1)
             {
              OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
              return(0);
             }
                     
      if(OrderType()==OP_SELL) 
      if ( Buy1==1)
             {
              OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
              return(0);
             }
  
      if(OrderType()==OP_BUYSTOP && Sell1==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
      if(OrderType()==OP_SELLSTOP && Buy1==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
    }
   
   for(int i2=0; i2<OrdersTotal(); i2++)
     {
      if(OrderSelect( i2, SELECT_BY_POS, MODE_TRADES)) 
   
         if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC2)
     if(OrderType()==OP_BUY)
      if ( Sellcl0==1)
       {

       OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
              return(0);
            }
                 
    if(OrderType()==OP_SELL) 
    if ( Buycl0==1)
    
            {
              OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
              return(0);
          
        }
     if(OrderType()==OP_BUYSTOP) 
     if ( Sellcl0==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
      if(OrderType()==OP_SELLSTOP && Buycl0==1)
        {
         OrderDelete(OrderTicket());
        return(0);
         }
      }   
    
     // MODIFICATION -------
     
     TrailingPositionsBuy( parab);
    TrailingPositionsSell( parab);
   // TrailingPositionsBuystop(parab);
   // TrailingPositionsSellstop(parab);
    return (0);
   }
/*bool ExistPositions() {
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
            return(True);
         }
      } 
   } 
   return(false);
}*/
     
void TrailingPositionsBuy(double parab) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1) { 
            if (OrderType()==OP_BUY) { 
             //  if (Bid-OrderOpenPrice()>trailingStop*Point) { 
              //    if (OrderStopLoss()<Bid-trailingStop*Point) 
                     ModifyStopLoss( parab);
                                   
               } 
            } 
         } 
      } 
   } 
//} 
void TrailingPositionsSell(double parab) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1) { 
            if (OrderType()==OP_SELL) { 
             //  if (OrderOpenPrice()-Ask>trailingStop*Point) { 
             //     if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)  
                     ModifyStopLoss( parab);
                  
               } 
            } 
         } 
      } 
   } 

Sell1, buy1, sellcl0, buycl0是对关闭条件的描述。


这样的职位双重覆盖到底有没有用?谢谢你!

 
exolon >>:

Здравствуйте. Помогите пожалуйста реализовать такую вещь. В одном эксперте работают 2 независимых условия, на основе которых открываются отдельные ордера, каждый со своим magic. В каждый момент времени на одном графике может быть только один ордер по каждому из условий, при этом они могут быть одновременно друг с другом. Для проверки возможности открытия ордеров делаю такую конструкцию

Но открываются ордера только со вторым magic.

Далее, закрываются ордера тоже независимо друг от друга. При этом ордер с первым magic использует трал, а второй нет

Применил вот такой вариант, но закрытия либо происходят не по правилам ни от первого, ни от второго условия, либо не происходят вообще

sell1, buy1, sellcl0, buycl0 - описания условий на закрытие.


Будет ли вообще работать такой двойной перебор позиций? Благодарю!


在关闭和删除订单后,删除返回者并将其放在函数的末尾,或者用一个连续体来代替。

 

大家好,我正在写我的第一个mql程序,同时也在学习这门语言。

我正在学习这门语言,你能给我建议吗?


我有 问题:如果我在写我的第一个mql程序,我想知道它有什么问题。你能告诉我什么是错的吗?我花了四个小时翻阅参考书,我自己都不明白。


void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

 
Jahspear писал(а)>>

大家好,我正在写我的第一个mql程序,同时也在学习这门语言。

我正在学习这门语言,你能给我建议吗?

我有个问题:如果我在写我的第一个mql程序,我想知道它有什么问题。你能告诉我什么是错的吗?我在参考书上探究了大约四个小时,我不明白。

void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

而我做这个循环是为了什么。如果没有条件,我们就不应该等待一些未知的天数来出现信号。

 

下午好。

该指标有 IndicatorShortName("iC_C_mod, ..... ")。

然而,除了这个标题,我还需要在指标窗口中插入一个动态变化的变量的注释。

像f-i评论()

我需要它在指标窗口中,但不需要在图表中。

请指示?

 
Jahspear >>:



void CheckSell()
{
if((NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
Sell();
}


可能是这样的,因为无限循环在现代硬件上需要很长的时间。