任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 672

 
TarasBY:

我没有使用过这个功能。其假设是,如果终端选择了一个字符一次,下一次尝试选择相同的字符可能会返回错误。试着忽略这个函数的返回检查。

事实证明,SymbolSelect("AUDUSD", true)只有在AUDUSD不在MarketWatch中时才会返回true--也就是说,当该货币对被添加到MarketWatch中。一旦该货币对进入MarketWatch,后续调用将返回false。

这种行为与该函数的手册完全不一致。

我不得不使用一个自己编写的函数,扫描所有的SymbolName(i, true)i=0...SymbolsTotal(true)

 
Mr.Profit:

事实证明,SymbolSelect("AUDUSD", true)只有在AUDUSD不在MarketWatch中时才会返回true--也就是说,当该货币对被添加到MarketWatch中。一旦该货币对进入MarketWatch,后续调用将返回false。

这种行为与该函数的手册完全不一致。

有东西提示我,我们可以不用SymbolSelect()
 
TarasBY:
直觉告诉我,你可以不使用SymbolSelect()。

是的,刚刚更新了我上面的帖子
 
borilunad:

另一个是什么,或者我们是否应该在这个问题上已经做了一个腿部的准备?


掌握外汇

 
laveosa:
我花了4个月的时间在Alpari.....,做了一个猫头鹰。nano quanto代码非常他妈的耗时,而且不小.....,现在一切都!!!!!。遗憾的是....我不知道该怎么做。

第三次猫头鹰,还是同样的错误,很高兴问题不在代码上:)
 
事情是这样的,我把一个新的 "No"(这是一个高速玻璃纤维电缆,下载速度为每秒7MB)之后我在Alpari也遇到了同样的情况,但在Master Forex一切正常,Admeral也是如此.........。这里还有一个细微的差别,经纪商安装在驱动器D:)在重新安装操作系统时,我没有安装新的,而是使用旧的....。也许我应该安装它?
 
laveosa:


掌握外汇


谢谢,我会看看的
 
borilunad:

谢谢,我会看看的

不是竞选,只是回答了一个问题 :)
 

大家好。我不久前开始写EA。我遇到了一个看似简单的问题,但我无法解决。 请帮助我。

问题是。在一个新的刻度上,我失去了一个变量的值。

简要描述。将OrderSend()函数的返回值分配给某个变量,并使用返回命令退出。 在下一次打勾时,变量值变为等于零。

源代码的关键因素。下面是完整的源代码。

如果(SAR_Prev>LastClose &&SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(,OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red)。
Alert ("Assigned value to ticket_sell variable ", ticket_sell);
返回。
}
}

提醒("存在的位置=", position_exists, "买单", ticket_buy, "卖单", ticket_sell)。

结果。

截图显示仓位被成功打开,订单票被记忆在ticket_sell变量中。然而,ticket_sell变量在下一个tick上变为零。而且我不能修改/删除票据上的订单。

// Простой параболик. Переворотная стратегия.
// В условиях, когда в терминале уже есть открытые позиции по другим инструментам.

input double TakeProfit    =2500;
input double StopLoss      =400;
input double Lots          =1;
input double TrailingStop  =100;

input double Parameter1    =0.02; // Параметры индикатора PSAR
input double Parameter2    =0.2;
   
void OnTick()
{
int position_exists; // Переменная, принимающая значения 0 или 1. Указывает, открыта ли позиция по интструменту EURUSD

// Занесение в переменные значений индикатора на последнем и предпоследнем закрывшихся барах  
double SAR_Prev=iSAR(NULL,0,Parameter1,Parameter2,1);
double SAR_Prev2=iSAR(NULL,0,Parameter1,Parameter2,2);
// Занесение в переменные цен закрытия на последнем и предпоследнем барах
double LastClose=iClose(NULL,0,1);
double LastClose2=iClose(NULL,0,2);

  
//---------------------------------------------------------------------     
// Блок, который определяет, открыта ли позиция по инструменту EURUSD
// путём перебора всех открытых ордеров терминала в цикле. 
// Если позиция открыта, то переменной position_exists будет присвоено значение 1
int cnt;
string sym;
int type;

int total=OrdersTotal();
position_exists=0;
for (cnt=0; cnt<=total-1; cnt++)
   {
    bool select=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    sym=OrderSymbol();
    type=OrderType();
    if (sym=="EURUSD" && (type==1 || type==0)) 
      {
       position_exists=1;
       break;
      }
   }     
//--------------------------------------------------------------------- 
// Если позиция по EURUSD не существует, то проверяем условия открытия сделки  
   if(position_exists==0)
      {
       if (SAR_Prev<LastClose && SAR_Prev2>LastClose2)
         {
          int ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-StopLoss*Point,Ask+TakeProfit*Point," ",111,0,Blue);
          Alert ("Присвоили значение пременной ticket_buy ", ticket_buy);
          return;
         }
         
       if (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
         {
          int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point," ",111,0,Red);
          Alert ("Присвоили значение пременной ticket_sell ", ticket_sell);
          return;
         }
      }
      
   Alert ("Существование позиции = ", position_exists, " Ордер на покупку ", ticket_buy, " Ордер на продажу ", ticket_sell);
//--------------------------------------------------------------------- 
// Если позиция по EURUSD существует, то проверяем условия закрытия позиции  
   if (position_exists==1)
      {
       if (ticket_sell==0) // Если открытой позиции на продажу нет, то выбираем открытый ордер на покупку по тикету
         {bool select_buy=OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES);}
         
       if (ticket_buy==0) // Если открытой позиции на покупку нет, то выбираем открытый ордер на продажу по тикету
         {bool select_sell=OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES);}
         
       
       if(OrderType()==OP_BUY) 
         {
          if(SAR_Prev>LastClose && SAR_Prev2<LastClose2) // Проверяем уловия для закрытия длинной позиции
              {
               bool close_buy=OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet);
               return;
              }
         }
        
        
        if(OrderType()==OP_SELL)
         {
          if(SAR_Prev<LastClose && SAR_Prev2>LastClose2) // Проверяем уловия для закрытия короткой позиции
              {
               bool close_sell=OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet);
               return;
              }
          } 
       }
} 

 
Sergey71:

大家好。我不久前开始写EA。我遇到了一个看似简单的问题,但我无法解决。 请帮助我。

问题是。在一个新的刻度上,我失去了一个变量的值。

简要描述。将OrderSend()函数的返回值分配给某个变量,并使用返回命令退出。 在下一次打勾时,变量值变为等于零。

源代码的关键因素。下面是完整的源代码。

如果(SAR_Prev>LastClose &&SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(,OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red)。
Alert ("Assigned value to ticket_sell variable ", ticket_sell);
返回。
}
}

提醒("存在的位置=", position_exists, "买单", ticket_buy, "卖单", ticket_sell)。

结果。

截图显示仓位被成功打开,订单票被记忆在ticket_sell变量中。然而,ticket_sell变量在下一个tick上变为零。而且我不能修改/删除票据上的订单。


为了避免丢失价值,我们需要一个全局变量,把它的声明放在OnTick() 之外,或者把它变成静态的