Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1037

 
Tema97:

Cosa faccio ora? Ho una strategia basata sul canale - c'è una sostituzione alternativa?

Certo che c'è. Calcola i valori, salvali in una matrice o struttura e usali per il tuo EA. E si possono disegnare gli oggetti anche da lì - i valori sono disponibili.
 
Tema97:

Cosa faccio ora? Ho una strategia basata sul canale - c'è una sostituzione alternativa?

Cosa c'è da costruire? Interrogare l'indicatore tramite iCustom.
Per la vendita, è possibile incorporare con#resource
 
Voglio implementare quanto segue
la possibilità di aggiungere diversi intervalli di tempo a UN foglio (in finestre diverse ma su un foglio)
Si prega di consigliare dove andare e dove scavare). è possibile attraverso mql o WInApi?
forse ci sono esempi dell'articolo che non sono riuscito a trovare(
 
kocunyc89:

per favore aiutatemi a risolvere questo problema! dà errore 'Void' - dichiarazione senza tipo 36 4 e dove dovrei riorganizzare o scrivere return?
//--------------------------------------------------------------------
Void OnTick()
{

void è scritto con una piccola minuscola invece che con una maiuscola. Guarda, è di un colore diverso. Metti il cursore su questa parola e premi F1 - spesso aiuta.

Dopo averlo riparato appaiono molti messaggi d ' errore... Ho riparato i messaggi d'errore, ma controllate voi stessi la logica

#property strict

bool Результат;

extern int   SL             = 200,      //Стоплосс в пунктах
             TStop          = 20,       //
             TStep          = 10,       //
             TP             = 85;       //Тейкпрофит в пунктах
//extern double Lot          = 0.10;     //используется только при risk = 0
extern double Lots           =  0;       // лот, если 0, то динамический
extern double RiskPercentage =  50;      // % от депо на лот, если динамический
extern int    MaxOrders      = 6;        //Максимальное кол-во ордеров одного направления

//--------------------------------------------------------------------
int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;

string txt;
//--------------------------------------------------------------------
int init()
{
   if(Digits==3||Digits==5)
   {
      TStop *=10;
      TStep *=10;
      SL    *=10;
   }
   return(INIT_SUCCEEDED);
}


//--------------------------------------------------------------------
void OnTick()
{
  double Lot = Lots;
  int Ticket = 0;
  if (Lots==0)
  {
    double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
    double minLot = MarketInfo(Symbol(), MODE_MINLOT);
    double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
    double step   = MarketInfo(Symbol(), MODE_LOTSTEP);
    double account = AccountFreeMargin();
    double percentage = account*RiskPercentage/100;
  
    Lot = MathRound(percentage/margin/step)*step;
  
    if(Lot < minLot) Lot = minLot;

    if(Lot > maxLot)Lot = maxLot;
  }

  int buy=0,sell=0;
  for (int i=0; i<OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         tip=OrderType();
         if (tip==0) buy++;
         if (tip==1) sell++;
    }  
  }

  Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
  double TrPr=0,StLo=0;
  double L    = NormalizeDouble(Low[0], Digits);
  double L1   = NormalizeDouble(Low[1], Digits);
  double L2   = NormalizeDouble(Low[2], Digits);
  double L3   = NormalizeDouble(Low[3], Digits);

  double H   = NormalizeDouble(High[0],Digits);
  double H1  = NormalizeDouble(High[1],Digits);
  double H2  = NormalizeDouble(High[2],Digits);
  double H3  = NormalizeDouble(High[3],Digits);

  double O   = NormalizeDouble(Open[0], Digits);
  double O1  = NormalizeDouble(Open[1], Digits);
  double O2  = NormalizeDouble(Open[2], Digits);
  double O3  = NormalizeDouble(Open[3], Digits);

  double C   = NormalizeDouble(Close[0],Digits);
  double C1  = NormalizeDouble(Close[1],Digits);
  double C2  = NormalizeDouble(Close[2],Digits);
  double C3  = NormalizeDouble(Close[3],Digits);

                         //LONG
  if (buy<MaxOrders  && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
    if (Ticket==0)
    Print("Error BUY",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
      TimeBar=Time[0];
    }
  }

                                  //SHORT
  if (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
    if (Ticket==0)
    Print("Error SELL",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
      TimeBar=Time[0];
    }
  }

  Trailing();
}
//!!! куда передвинуть?   return(0);


void Trailing()
{
  for(int i=OrdersTotal() -1; i>=0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      {
        if(OrderType()==OP_BUY)
        {
          if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
          {
            if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
            {
              if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
              Print("Ошибка модификации ордера на покупку");
            }
          }
        }

        if(OrderType()==OP_SELL)
        {
          if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
          {
            if((OrderStopLoss()> (Ask+(TStep+TStop)*Point))  || (OrderStopLoss()==0)  )
            {
              if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
                {
                        Print("Ошибка модификации ордера на продажу");
                }
            }
          }
        }
      }
    }
  }
}

 
LRA:

void è scritto con una piccola minuscola, non con una grande maiuscola. Vedi se è di un colore diverso. Metti il cursore su questa parola e premi F1 - spesso aiuta.

Dopo averlo aggiustato appaiono così tanti messaggi di errore... Corretti i messaggi di errore, ma controllate voi stessi la logica


Grazie mille uomo gentile!

 
Salve, signori commercianti! Ho scritto un robot di segnalazione basato sul codice che ho postato sopra. Il robot genera segnali per le opzioni quasi accuratamente, ma con un ritardo di due barre. Cosa dovrei cambiare nel codice per produrre gli stessi risultati ma due barre prima? O è impossibile? Grazie.
 
Potete per favore consigliarmi - ho un indicatore personalizzato - Canale - ho bisogno di restituire il valore del limite superiore del canale - come posso farlo?
 
artmedia70:

La variabile int contiene esattamente il numero di secondi dal 1970, mentre la variabile datetime contiene la data.

Se avete bisogno di una certa barra nella storia, allora non importa come la specificate - per data o per numero di secondi, in ogni caso, la variabile indicherà il tempo di apertura di questa particolare barra, indipendentemente dall'arrivo di nuovi tick e dall'apertura di nuove barre.

Grazie mille, ma c'è un altro problema. Ho un indicatore che ha la funzione stat, questa funzione dovrebbe essere usata SOLO quando arriva un nuovo segnale, ma questo problema è contato su ogni barra, ho fatto tutto e normalizzato il doble in confronto, quindi credo di essere fregato. Ucciso l'intera serata, qualcuno può spiegare cosa c'è di sbagliato ???? L'indicatore nell'atache nella linea 193 è una chiamata di funzione con una condizione, ma la condizione non è soddisfatta e il Furction stat è calcolato all'arrivo di ogni barra, sono già annoiato di trovare l'errore, ragazzi aiutate per favore!!!!! Grazie in anticipo....
File:
 

Ho scoperto solo ora che la funzione stat viene ricalcolata se l'indicatore viene chiamato da un altro indicatore, quando entrambi sono sul grafico. Cioè, una volta viene calcolato per se stesso e la seconda volta per l'indicatore che lo chiama. Che cos'è?

 

Il seguente è mostrato nell'immagine. Il commento in alto è il valore del buffer nell'indicatore principale in cui avviene il calcolo, e la stampa (sotto) è lo stesso buffer, ma solo chiamato in un altro indicatore ed emesso nella stampa. La differenza è significativa, MA PERCHÉ!!!!!

il primo file è quello principale, il secondo richiama il buffer del primo....