[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 375

 
iMAG:

尊敬的专业人员和有识之士!

我很茫然--BB指标给了我难以理解的信号(不是 "红-绿-红"!)。更准确地说,我设置了这样一个电话。

bolup = iBands(Symbol(), 0, 24, 0, 2, 0, 1, 1);
boln = iBands(Symbol(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Print("Bands upper = ", bolup;)
Print("Bands lower = ", boldn);
Print("Bands media = ", bolmd);

其结果是,所有3个变量都给出了相同的值。>8-O

欧元对,TF - H1。有什么想法吗?

提前感谢...

你是否也会将偏差设置为负数?
 
Fantar:

为清晰起见,我试图画出它的图片

现在试着在mq4上做同样的事情。如果有什么不清楚的地方,这里是一个提问的分支。有一个用于从头开始创建EA的工作 服务
 
iMAG:

尊敬的专业人员和有识之士!

我很茫然--BB指标给了我难以理解的信号(不是 "红-绿-红"!)。更准确地说,我给下面的电话。

bolup = iBands(Symbol(), 0, 24,0, 2, 0, 1, 1);
boldn = iBands(Symbol(), 0, 24,0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Print("Bands upper = " , bolup);
Print("Bands lower = " , boldn);
Print("Bands media = " , bolmd);

结果,所有3个变量都给出了相同的值。>8-O

它是欧元,H1。有什么想法吗?

提前感谢...

你设置的主线 的偏差为0(零)。它应该大于零。
 

该策略的本质:通过随机信号(5,14,3)进入,也通过随机信号退出,但有另一个周期(5,3,3)。我不明白如何通过随机指数而不是反向信号来进行退出。
我有一个问题,我不知道如何解决,我试着解释一下。
因此,在我发布的代码中,有两个函数
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;

int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue;

if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку

// как пример
if (signal==OP_BUY) continue;
}

if (type==OP_SELL)
{
//
// код разрешающий оставить продажу

// как пример
if (signal==OP_SELL) continue;
}

closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера

// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return;
}

//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;

int ticket,type;
double lots;
bool res;

int total=OrdersTotal();

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении

// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

}
//----
return;
}
在 void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])中,我们必须放一个条件,决定我们是否应该离开或关闭订单。
我试着设置条件,但没有任何效果....
谁能看一下,看看这些函数中是否有错误,或者我弄错了....。
附加的文件:
 
你能告诉我,如果我有两个连续的OrderSend命令设置订单,我是否需要在它们之间放置IsTradeAllowed函数?

还是没有必要,只有在成功下单后,EA才会从第一个OrderSend调用 传递到第二个?

如果仍然需要IsTradeAllowed,那么应该在while循环中设置什么时间延迟?
 
Desead:
你能告诉我,如果我有两个连续的OrderSend命令设置订单,我是否需要在它们之间放置IsTradeAllowed函数?

还是没有必要,只有在成功下单后,EA才会从第一个OrderSend调用传递到第二个?

在测试器中不需要,但在模拟或真实账户中,你会收到一条关于交易繁忙的信息。

导致


如果仍然需要IsTradeAllowed,那么应该在while循环中设置什么时间延迟?
取决于执行速度,不同的服务器有不同的执行速度。记得也要在IsStopped()上添加一个循环检查,否则你不会有任何收获。
 
你好,请告诉我在哪里可以下载到详细的报价档案(滴答或分钟)?在MT4的报价档案中的数据(不多)分钟数据只有5天的测试。
 

下午好。该系统提供了三个买入和卖出的入口点。但当一个信号出现时,只要信号存在,就会在每个tick 上开仓。某个地方的标志出现了错误。请帮助我理解它。

   static bool buy_h=true, buy_l=true, buy_50=true,
               sell_h=true, sell_l=true, sell_50=true;

 if(LSMA_Sig==0) // up-trend
    {
      if(Stoch_Sig==4 && buy_l==true)
       { 
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_l=false; // снимем флаг
       }
      //---
      if(Stoch_Sig==0 && buy_50==true)
       {
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_50=false;        
       }
      //---
      if(Stoch_Sig==2 && buy_h==true)
       {
         sl=Ask-Stop_Loss*Point;       
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_h=false;         
       }   
    }
   if(LSMA_Sig==1) // dn-trend
    {
      if(Stoch_Sig==3 && sell_h==true)
       {
         sl=Bid+Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
            Alert("Неудачная попытка открыть ордер SELL. Ошибка: ", GetLastError());
         if(Ans==true)
            sell_h=false;
       }
     //---
     if(Stoch_Sig==1 && sell_50==true)
      {
         sl=Bid+Stop_Loss*Point;      
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
            Alert("Неудачная попытка открыть ордер SELL. Ошибка: ", GetLastError());
         if(Ans==true)
            sell_50=false;         
      }
     //---
     if(Stoch_Sig==5 && sell_l==true)
      {
         sl=Bid+Stop_Loss*Point;      
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
            Alert("Неудачная попытка открыть ордер SELL. Ошибка: ", GetLastError());
         if(Ans==true)
            sell_l=false;        
      }
    }
    
   if(Stoch_Sig!=4 && buy_l==false) // поднимем флаг
       buy_l=true;
   if(Stoch_Sig!=0 && buy_50==false)
       buy_50=true;
   if(Stoch_Sig!=2 && buy_h==false)
       buy_h=true;
   if(Stoch_Sig!=3 && sell_h==false)
       sell_h=true;
   if(Stoch_Sig!=1 && sell_50==false)
       sell_50=true;
   if(Stoch_Sig!=5 && sell_l==false)
       sell_l=true;  
 
silhouette:

下午好。该系统提供了三个买入和卖出的入口点。但当一个信号出现时,只要信号存在,就会在每个tick上开仓。某个地方的标志出现了错误。请帮助我理解它。

OrdersTotal()给出了已经开仓的数量,也就是说,我们可以用它来检查是否已经有一个开仓。

 
有什么方法可以在不开单的情况下查出1手订单的佣金吗?