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

 
borilunad:


Resta solo una cosa da fare, invitarlo a investire i nostri conti! :))

D'accordo! Soprattutto - il conto di investimento è già pronto! :-)
 

Salve.

Abbiamo bisogno della funzione che calcola il lotto in incrementi. Cosa sarebbe possibile regolare, per esempio, per ogni 500 lotti di aumento

Quindi depo 1000 - lotto 0,1

Depo 1500 - lotto 0,15

2000 - lotto 0,2

Si prega di postare la funzione.

 

Buongiorno, cosa significa la condizione di vuoto? Quando il prezzo sale di 35 pip, il mio stoploss si sposta di 10 pip sotto l'ordine, cioè la sua distanza dal prezzo è di 45 pip.

O di che tipo di divario stiamo parlando?

 
T-G:

Salve.

Avete bisogno della funzione per calcolare il lotto in modo incrementale. Che sarebbe possibile regolare, per esempio, per ogni aumento di 500 lotti

Quindi depo 1000 - lotto 0,1

Depo 1500 - lotto 0,15

depo 2000 - lotto 0,2

Si prega di postare la funzione.


È possibile senza funzioni:

extern double depo = 1000.0;

extern double lot    = 0.1; 

double Lot; 

//--------------------------------

int start()

//--------------------------------

double Equ = AccountEquity();

Lot  = NormalizeDouble(lot*Equ/depo,2);
 
T-G:

Salve.

Abbiamo bisogno della funzione che calcola il lotto in modo incrementale. Che sarebbe possibile regolare, per esempio, per ogni aumento di 500 lotti

Quindi depo 1000 - lotto 0,1

Depo 1500 - lotto 0,15

Depo 2000 - lotto 0,2

Si prega di postare la funzione.

Si potrebbe fare in questo modo:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Расчитываем размер лота (ступенчато)                                       |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_Lots (double fd_BeginLot = 0.1,        // начальный размер лота
                  int fi_BeginDepo = 1000,         // начальный размер депозита
                  int fi_IncrementDepo = 500,      // приращение депозита
                  double fd_IncrementLot = 0.05)   // приращение лота
{
    double ld_Balance = AccountBalance();
//----
    if (ld_Balance < fi_BeginDepo + fi_IncrementDepo) return (fd_BeginLot);
    int li_K_Lot = (ld_Balance - fi_BeginDepo) / fi_IncrementDepo;
//----
    return (fd_BeginLot + fd_IncrementLot * li_K_Lot);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

Basta non dimenticare di normalizzare il lotto.

 
Emesso un biglietto sopra la partenza. Ora modifica solo un ordine, ma questo è un altro errore! Altrimenti, la variabile è stata dichiarata all'interno degli if.
 
Dimka-novitsek:

Buongiorno, cosa significa una condizione di vuoto? Quando il prezzo sale di 35 pip, il mio stoploss si sposta di 10 pip sotto l'ordine, cioè la sua distanza dal prezzo è di 45 pip.

O di che tipo di divario stiamo parlando?


Buongiorno, testa rinfrescata!

Mentre stiamo inviando, ricevendo ed eseguendo un ordine di modifica, il prezzo non sta fermo, su o giù, chissà!

#include <stderror.mqh>
#include <stdlib.mqh> 
//-------------------

extern int prev = 30;//зазор! Для 5-знака!
extern int sl   = ??;
extern int tp   = ??;
//------------------
int start()
{
//------------------
//----------------------/  Stops & Trailing  \----------------------\\
  for(int i = 0; i < OrdersTotal(); i++)
  {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderSymbol() != Symbol() && OrderMagicNumber() != Magic) continue;
      if(OrderCloseTime() != 0) continue;
      if(OrderType() == OP_BUY)
      {
        if(OrderStopLoss() < OrderOpenPrice() || OrderStopLoss() == 0)
        {
//----------------------
          if(OrderStopLoss() == 0)
          if(Bid < OrderOpenPrice() && Bid > NormalizeDouble(OrderOpenPrice()-sl*Point+prev*Point,Digits))
          if(Bid > NormalizeDouble(OrderOpenPrice()-sl*Point+prev*Point,Digits))
          {
            SL = NormalizeDouble(OrderOpenPrice()-sl*Point,Digits);
            if(Bid < NormalizeDouble(OrderOpenPrice()+tp*Point-prev*Point,Digits))
            {
              TP = NormalizeDouble(OrderOpenPrice()+tp*Point,Digits);
              ModifyOrder(OrderTicket(),OrderOpenPrice(),SL,TP,0,Blue);return(0);
        } } }
//-----------------------
//------------------------/  Modify Order  \------------------------\\
void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3)
  {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0)
    { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(3000); RefreshRates(); ModifyCnt++;
} } }

E per Sall è opportunamente il contrario! Buona fortuna nel capirlo senza commenti, che sono ridondanti secondo me!

E, per favore, guarda nel dizionario esplicativo russo, in modo che i tuoi post siano più leggibili.

Lo cerco ogni tanto, visto che penso in un'altra lingua da più di 10 anni e non sono al passo con le vostre "innovazioni"... :))

 
Dimka-novitsek:

Buon pomeriggio! Errore di modifica dell'ordine 4051. Ho pensato per un'ora. Sembra essere il parametro giusto lì!!! Per farla breve. Il parametro price è il prezzo di apertura dell'ordine, OrderOpenPrice(), è standard.

Il nostro prezzo di stop è 10 punti sotto il prezzo aperto, e abbiamo memorizzato il prezzo. Lo memorizziamo nella variabile tsena all'apertura dell'ordine.

Abbiamo due ordini, uno con un profitto e uno senza. Sembra essere chiaro. Qual è l'errore? Cos'altro potrebbe essere?

Sì, la condizione sembra essere chiara, anche se non è davvero rilevante. Cioè, il prezzo si è mosso di 30 punti, la condizione ha funzionato (tsena+30*Point).

Abbiamo impostato perenos=true una volta; queste condizioni sembrano effettivamente funzionare.

Non so come pensarci.

In realtà Wear una volta perenos=true; Queste condizioni non dovevano essere osservate, poiché non si indossava da nessuna parte.

Questa linea:

        int tacket = OrderSend (Symbol(), OP_BUY, lot, NormalizeDouble (Ask, Digits), 5, NormalizeDouble (Ask - (35 * Point), Digits), 
            NormalizeDouble (Ask + (45 * Point), Digits), NULL, 450, 0, CLR_NONE);

e poi usando (non su questo tick) questa variabile per modificare un ordine con tick = 0 (la variabile sarà resettata), dimostra che non conosci le basi - inizia con i concetti di variabili locali e globali.

E l'apertura di una copia dell'ordine appena aperto dopo 2 secondi - QUESTO È IL PILOTAGGIO PIÙ ALTO!!! - sto piangendo... :)))

 
GRAZIE!!!
 
borilunad:

Si può fare senza funzioni:

Prima di affrettarti a rispondere, dovresti prima esserti preso la briga di leggere attentamente le condizioni (cosa vuole la persona) e poi prendere e calcolare i risultati del tuo codice.
Per cominciare, la conversazione riguarda Deposito, e questo è AccountBalance(). Equ/depo è un numero frazionario, e di che tipo di scaglionamento possiamo parlare?