Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 811

 

Aqui precisamos fazer pedidos pendentes e calcular seus preços em relação ao preço de fechamento do bar anterior. BUYSTOP é colocado, enquanto SELLSTOP retorna erro 130. Há algum erro neste código? Ou em outra função.

SetOrders() {

double ldStop=0, ldTake=0;
int spr=MarketInfo(Symbol(), MODE_SPREAD);
double PredBar=iClose(NULL,PERÍODO_M5,1);
duplo pAsk=PredBar+(DistanceSet+spr)*Ponto;
duplo pBid=PredBar-(DistanceSet+spr)*Ponto;

se (!ExistOrder(1)) {
if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
}
se (!ExistOrder(2)) {
if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
}
}
 
Pomid:

Aqui precisamos fazer pedidos pendentes e calcular seus preços em relação ao preço de fechamento do bar anterior. BUYSTOP é colocado, enquanto SELLSTOP retorna erro 130. Há algum erro neste código? Ou em outra função.

void SetOrders() {

  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double PredBar=iClose(NULL,PERIOD_M5,1);
  double pAsk=PredBar+(DistanceSet+spr)*Point;
  double pBid=PredBar-(DistanceSet+spr)*Point;

  if (!ExistOrder(1)) {
    if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
    if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
    SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
  }
  if (!ExistOrder(2)) {
    if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
    if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
    SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
  }
}

Por que você não se dirige ao autor? Ele ainda está vivo e jovem, não velho! As coordenadas estão no código acima de cada função! Todos o conhecem e o respeitam!

E aprenda como inserir um código como este, com SRC!

void SetOrders() {

  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double PredBar=iClose(NULL,PERIOD_M5,1);
  double pAsk=PredBar+(DistanceSet+spr)*Point;
  double pBid=PredBar-(DistanceSet+spr)*Point;

  if (!ExistOrder(1)) {
    if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
    if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
    SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
  }
  if (!ExistOrder(2)) {
    if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
    if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
    SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
  }
}

Você mexeu na PredBar sem entender, e esse é o resultado! Aprenda a matemática primeiro!

 
Boa noite, poderia me dizer como resolver o problema com o indicador não funcionando na nova construção? Ao compilar dá o erro 'TotalOrders' - tipo de expressão de troca ilegal (o erro é destacado no código ). Cumprimentos, alexandro.
 for (i=0; i<k; i++)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
    {
      if ((OrderSymbol()==Symb) && (OrderType()==op))
        {
            ko++;
            TotalOrders[ChartListPosition+1][ko][1]=NormalizeDouble(OrderOpenPrice(),dig);
            TotalOrders[ChartListPosition+1][ko][2]=NormalizeDouble(OrderStopLoss(),dig);
            TotalOrders[ChartListPosition+1][ko][3]=NormalizeDouble(OrderTakeProfit(),dig);
            TotalOrders[ChartListPosition+1][ko][4]=OrderTicket();
            TotalOrders[ChartListPosition+1][ko][5]=OrderLots();
            TotalOrders[ChartListPosition+1][ko][6]=OrderType();
            TotalOrders[ChartListPosition+1][ko][7]=OrderMagicNumber();
            TotalOrders[ChartListPosition+1][0][0]=ko;
           
              switch(TotalOrders[ChartListPosition+1][ko][6])
              {
               case OP_BUY:
                        Type="Buy";
                break;
                
               case OP_BUYSTOP:
                        Type="Buy Stop";

 for(int j=1;j<=OrdersCount;j++)  
      {
       
         switch(TotalOrders[ChartsListPosition+1][j][6])
          {
           case OP_SELL: 
               if (TotalOrders[ChartsListPosition+1][j][2]!=0 && 
                   ask>=(TotalOrders[ChartsListPosition+1][j][2]-NormalizeDouble(StopLevel*point,dig)))  
                   {
                    test=StopLossColor;
                   } 
                   else
                   {
                   if (TotalOrders[ChartsListPosition+1][j][3]!=0 && 
                       ask<=(TotalOrders[ChartsListPosition+1][j][3]+NormalizeDouble(StopLevel*point,dig)))
                      {
                       test=TakeProfitColor;
                      }
                   }
             break;       
 
karwin:
Boa noite, poderia me dizer como resolver o problema com o indicador não funcionando na nova construção? Ao compilar dá o erro 'TotalOrders' - tipo de expressão de troca ilegal (o erro é destacado no código). Cumprimentos, alexandro.

A variável deve estar lá, e não algo mais:

              int Переменная=TotalOrders[ChartListPosition+1][ko][6];
              switch(Переменная)
              {
               case OP_BUY:
                        Type="Buy";
                break;
                
               case OP_BUYSTOP:
                        Type="Buy Stop";
 

Olá camaradas.

Você pode me aconselhar, não estou muito familiarizado com o MT5, quase nunca o usei, enquanto testei apenas um núcleo de CPU, tenho 8 deles, por que isso? Como posso consertá-lo?


 
7Konstantin7:

Olá camaradas.

Você pode me aconselhar, não estou muito familiarizado com o MT5, quase nunca o usei, enquanto testei apenas um núcleo de CPU, tenho 8 deles, por que isso? Como posso consertá-lo?


Você deve perguntar no quinto fórum
 
7Konstantin7:

Olá camaradas.

Você pode me aconselhar, não estou muito familiarizado com o MT5, quase nunca o usei, enquanto testei apenas um núcleo de CPU, tenho 8 deles, por que isso? Como posso consertá-lo?


É assim para testes ou para otimização? Se apenas testar - um núcleo funciona, mas se você ativar a opção "Otimizar" no testador de estratégia, todos os núcleos do processador funcionarão.
 
borilunad:

Você mexeu na PredBar sem entender, esse é o resultado! Aprenda a matemática primeiro!

Obrigado, aprendeu, corrigiu.
 
evillive:
você deve perguntar sobre isso no quinto fórum

"Não sou um usuário do MT5 e em breve o site será fumado, não me sento ali e faço a pergunta aqui".

barabashkakvn:
Isso ocorre durante os testes ou durante a otimização? Se você apenas testar - um núcleo funciona, mas quando você ativar a opção "Otimizar" no testador de estratégia, executará todos os núcleos do processador.

Durante o teste, um núcleo está funcionando e tudo está funcionando como deveria,

Não consigo entender porque eles não usaram apenas toda a potência do processador no teste.

 
7Konstantin7:

"Não sou membro do site, por isso fiz a pergunta aqui".

Durante o teste, um núcleo está funcionando e tudo está funcionando como deveria,

Não consigo entender por que eles não usam todo o poder do processador nos testes.

E por que devemos carregar todos os núcleos durante os testes (sem a otimização ativada)? Afinal, se testar com visualização, não há pressa, e se testar sem visualização - então os computadores modernos realizam esta tarefa como sementes de girassol em um único núcleo.