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

 

Você pode me dizer por que no meu caso a variável OrderSended não é definida como falsa quando todas as condições são cumpridas?

int start()
  {
//----
   int i;
   int i2;
   double MACD;
   double MACD2 = iCustom(Symbol(),0,"MACD",5,21,1,0,0);
   double MACD3 = iCustom(Symbol(),0,"MACD",5,21,1,0,1);
   double MyNull = 0.0;
   int bar1;
   int bar2;
   static bool OrderSended = false;
   
   if(MACD2 > 0 && MACD3 > 0 || MACD2 < 0 && MACD3 < 0) // Вот эти условия
     {
     OrderSended = false;
     }
   Print("MACD2 = ",MACD2,"MACD3 = ",MACD3,"OrderSended = ",OrderSended);
   
   if(MACD2 < 0 && MACD3 > 0 && OrderSended == false)
     {
     if(OrderSend(Symbol(),OP_SELL,Lot,Ask,Slippage,Ask + StopLoss * Point,0,OrdersComment,MagicNumber,0,Red) > 0)
       {
       OrderSended = true;
       }
     }
//----
   return(0);
  }

Diz no log MACD2 e MACD3 que são maiores que zero, mas OrderSended ainda é verdade, embora deva se tornar falso quando ambas as variáveis são maiores que zero.

 
sss2019:

Você pode me dizer por que no meu caso a variável OrderSended não é definida como falsa quando todas as condições são cumpridas?

Diz no log MACD2 e MACD3 que são maiores que zero, mas OrderSended ainda é verdade, embora deva se tornar falso quando ambas as variáveis são maiores que zero.

if(MACD2 < 0 && MACD3 > 0

mas no código, um é maior que zero e o outro é menor que zero

 
ilunga:

e no código, um é maior do que zero e um é menor do que zero.


Portanto, é apenas um sinal para abrir uma posição, ou seja, onde as condições são maiores que zero

   if(MACD2 > 0 && MACD3 > 0 || MACD2 < 0 && MACD3 < 0) // Вот эти условия
     {
     OrderSended = false;
     }
 
sss2019:


Portanto, é apenas um sinal para abrir uma posição, ou seja, onde as condições são maiores que zero

Mas ainda é uma boa idéia colocar parênteses aqui, porque 99% das condições não são calculadas na ordem em que você gostaria que fossem:

 if((MACD2 > 0 && MACD3 > 0) || (MACD2 < 0 && MACD3 < 0)) // Вот эти условия

 

Diga-me se este projeto vai funcionar

if(OrdersTotal(MagicNumber))

Ou seja, se houver garantias com um número mágico específico, então...

 
sss2019:

Diga-me se este projeto vai funcionar

Ou seja, se houver garantias com um número mágico específico, então...

somente se você mesmo escrever a função
int OrdersTotal(int magic)
 
Diga-me, depois de executar uma função, por exemplo, esta função retorna um único valor ou todos eles? Por exemplo, em um loop um valor foi atribuído a duas variáveis, o loop retornará o valor de ambas as variáveis, ou apenas a última?
 

Então, fiz minha própria coisa com os fractais - escrevi meu próprio indicador... Bem, é mais fácil para mim. Eis a questão: tenho um problema.

como faço para trás as setas 3 barras? :(

Um pequeno pedaço de código...

SetIndexStyle(0, DRAW_ARROW,0,1);
SetIndexArrow(0,217);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexEmptyValue(0, 0.0);
SetIndexStyle(1, DRAW_ARROW,0,1);
SetIndexArrow(1, 218);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexEmptyValue(1, 0.0);

IndicatorShortName("My_iFractals");
SetIndexLabel(0, "iFractalsUp");
SetIndexLabel(1, "iFractalsDn");

UPD

Вопрос снят, сорри опять за кривость свою, но может кому будет интересно ответ- SetIndexShift(0,-3);

 
sss2019:
Mas diga-me, depois que uma função é executada, por exemplo, essa função retorna um único valor ou todos eles? Por exemplo, em um loop um valor foi atribuído a duas variáveis, o loop retornará o valor de ambas as variáveis, ou apenas a última?

Que bagunça...

1) pois não é uma função, é um operador de laço

2) a função só retorna o que foi dito para retornar com retorno

3) As variáveis estão frouxamente relacionadas com os loops. Você pode mudar até 10 deles em um loop

 

Pessoal, não consigo descobrir o que está errado, não está claro o que está acontecendo com o fechamento de pedidos:

quando é assim, funciona bem:

double PriceBid = Bid;
        double PriceAsk = Ask;
        PrevPriceBid = PriceBid;
        PrevPriceAsk = PriceAsk;
        double be = GetWeightedBELevel();
        if(be != -1)
        {
                double BuyLots = GetBuyLotsSum();
                double SellLots = GetSellLotsSum();
                
                double Swap = GetSwap();
                //string str = be + " ";
                if(Swap < 0)
                {
                        double diff = BuyLots - SellLots;
                        //str = str + MarketInfo(Symbol(), MODE_TICKVALUE) * diff + " " + (-Swap / (MarketInfo(Symbol(), MODE_TICKVALUE) * diff) * Point) + " ";
                        be += ND(-Swap / (MarketInfo(Symbol(), MODE_TICKVALUE) * diff) * Point + diff / MathAbs(diff) * 1 * Point);
                }
                //str = str + Swap + " " + be;
                //Comment(str);
                
                
                if((BuyLots > SellLots && ND(PrevPriceBid) < ND(be + (TakeProfitBuy) * Point) && ND(PriceBid) >= ND(be + (TakeProfitBuy) * Point)) ||
                        (BuyLots < SellLots && ND(PrevPriceAsk) > ND(be - (TakeProfitSell) * Point) && ND(PriceAsk) <= ND(be - (TakeProfitSell) * Point)))
                {
                        CloseAllBuy();
                        CloseAllSell();
                }
                

        }
                        ObjectDelete("ZeroBuy");
                if(BuyLots > SellLots)
                {double ZeroBuy = ND(be + TakeProfitBuy * Point);
                ObjectCreate("ZeroBuy",OBJ_ARROW,0,Time[0],ZeroBuy,0,0,0,0);                     
      ObjectSet   ("ZeroBuy",OBJPROP_ARROWCODE,6);
      ObjectSet   ("ZeroBuy",OBJPROP_COLOR, Olive);}
                        ObjectDelete("ZeroSell");
                if(BuyLots < SellLots)
                {double ZeroSell = ND(be - TakeProfitSell * Point);
                ObjectCreate("ZeroSell",OBJ_ARROW,0,Time[0],ZeroSell,0,0,0,0);                     
      ObjectSet   ("ZeroSell",OBJPROP_ARROWCODE,6);
      ObjectSet   ("ZeroSell",OBJPROP_COLOR, Olive);}
        
        //---------------------

Acrescento este código abaixo do superior:

//+X================================================================X+X+

  int b,s;
   double price,price_b,price_s,lot,lot_s,lot_b,SLb,SLs,SLbTwo,SLsTwo; //
   for (int i=0; i<OrdersTotal(); i++)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {  if (OrderSymbol()==Symbol())
         {
            price = OrderOpenPrice();
            lot   = OrderLots();
            if (OrderType()==OP_BUY ) 
               {price_b = price_b+price*lot; b++;  lot_b=lot_b+lot;}
            if (OrderType()==OP_SELL) 
               {price_s = price_s+price*lot; s++;  lot_s=lot_s+lot;}
   }  }  }
   ObjectDelete("SLb");
   if (b!=0) 
   {  SLb = (price_b/lot_b)+TakeProfitBuy * Point;
      ObjectCreate("SLb",OBJ_ARROW,0,Time[0],SLb,0,0,0,0);                     
      ObjectSet   ("SLb",OBJPROP_ARROWCODE,6);
      ObjectSet   ("SLb",OBJPROP_COLOR, Navy);
   }
   ObjectDelete("SLbTwo");
   if (b!=0) 
   {  SLbTwo = (price_b/lot_b)+TakeProfitBuyTwo * Point;
      ObjectCreate("SLbTwo",OBJ_ARROW,0,Time[0],SLbTwo,0,0,0,0);                     
      ObjectSet   ("SLbTwo",OBJPROP_ARROWCODE,6);
      ObjectSet   ("SLbTwo",OBJPROP_COLOR, Navy);
   }
   
   ObjectDelete("SLs");
   if (s!=0) 
   {  SLs = (price_s/lot_s)-TakeProfitSell * Point;
      ObjectCreate("SLs",OBJ_ARROW,0,Time[0],SLs,0,0,0,0);                     
      ObjectSet   ("SLs",OBJPROP_ARROWCODE,6);
      ObjectSet   ("SLs",OBJPROP_COLOR, Maroon);
   }
   ObjectDelete("SLsTwo");
   if (s!=0) 
   {  SLsTwo = (price_s/lot_s)-TakeProfitSellTwo * Point;
      ObjectCreate("SLsTwo",OBJ_ARROW,0,Time[0],SLsTwo,0,0,0,0);                     
      ObjectSet   ("SLsTwo",OBJPROP_ARROWCODE,6);
      ObjectSet   ("SLsTwo",OBJPROP_COLOR, Maroon);
   }
   
   if ((totalBuy > 1) && (SLb > Ask) && (SLbTwo < Ask) && (DnM15 > Bid)) //
   {
    CloseAllBuy();
   }
   if ((totalSell > 1) && (SLs < Bid) && (SLsTwo > Bid) && (UpM15 < Ask)) //
   {
   CloseAllSell();
   }
   //--------------------------------- 

após a primeira função não funciona e não fecha os pedidos. Não vejo nenhum erro no registro. Eu cometi um erro lá, por quê?


Movi todas as funções do objeto para baixo e ele está funcionando.