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

 
Integer:


Bene, eccoci qui, tutti insieme... Moderatori, sarebbe meglio mantenere l'ordine dove deve essere controllato. C'è una follia nel forum, e dove sono i moderatori? Se rimani bloccato, rompilo, mandalo via, ci sono i moderatori. Forse è il momento di dare un taglio alle stronzate?

Mi fa male vedere i giganti del forum litigare per niente. Questo è un forum per programmatori di una risorsa molto potente. Sii educato. Suggerimento:

1. Se viene fatto un tentativo di passare alle personalità, anche in modo surrettizio, bandite per 24 ore;

2. insultare una persona - divieto di una settimana;

3. Insulti ripetuti con parolacce - divieto di un mese;

4.Ignorando tutti gli avvertimenti precedenti e ripetendo le violazioni in modo duro - ban permanente.

 
yosuf:

È doloroso vedere i giganti del forum litigare per delle inezie. Questo è un forum di programmatori di una risorsa potente. Sii educato. Suggerimento:

1. Se viene fatto un tentativo di passare alle personalità, anche in modo surrettizio, bandite per 24 ore;

2. insultare una persona - divieto di una settimana;

3. insulti ripetuti con parolacce - un mese di divieto;

4.Ignorando tutti gli avvertimenti precedenti e ripetendo le violazioni in una forma dura - divieto perpetuo.



Sono assolutamente d'accordo, tranne che, purtroppo, i moderatori qui non sono abbastanza competenti per rilevare "qualcosa sotto mentite spoglie". È lo stesso per tutti i diplomatici sofisticati qui.
 

Scusate l'offtop, ma forse qualcuno può dirmi di cosa si tratta:

Dal manuale:

"È possibile passare parametri per riferimento. In questo caso, la modifica di tali parametri influenzerà le variabili corrispondenti nella funzione chiamata passata per riferimento. Gli elementi degli array non possono essere passati per riferimento. I parametri possono essere passati per riferimento solo entro i limiti di un singolo modulo, tale opportunità non è prevista per le funzioni di libreria. Per specificare che il parametro è passato per riferimento, il modificatore & deve essere posto dopo il tipo di dati.

Gli array possono anche essere passati per riferimento, tutti i cambiamenti saranno riflessi nell'array iniziale. A differenza dei parametri semplici, gli array possono essere passati per riferimento anche nelle funzioni di libreria".

Per passare un valore per riferimento da una funzione di libreria, devo usare un proxy sotto forma di un array di dimensione unitaria,

ci sono altre soluzioni?

E perché si fa così?

 
ALXIMIKS:

Scusate l'offtop, ma forse qualcuno può dirmi di cosa si tratta:

Dal manuale:

"È possibile passare parametri per riferimento. In questo caso, la modifica di tali parametri influenzerà le variabili corrispondenti nella funzione chiamata passata per riferimento. Gli elementi degli array non possono essere passati per riferimento. I parametri possono essere passati per riferimento solo entro i limiti di un singolo modulo, tale opportunità non è prevista per le funzioni di libreria. Per specificare che il parametro è passato per riferimento, il modificatore & deve essere posto dopo il tipo di dati.

Gli array possono anche essere passati per riferimento, tutti i cambiamenti saranno riflessi nell'array iniziale. A differenza dei parametri semplici, gli array possono essere passati per riferimento anche nelle funzioni di libreria".

1. Per passare un valore per riferimento da una funzione di libreria, devo usare un proxy sotto forma di un array di dimensione unitaria,

ci sono altre soluzioni?

2. perché è fatto in questo modo?

1. Giusto. Non c'è altro modo in MQL4.

2. Cosa esattamente? Se parliamo di passaggio per riferimento, allora è per passare grandi volumi di dati (maggiori della lunghezza del tipo base). Non per caricare la pila con loro. Di solito, le strutture, le classi e gli array sono passati per puntatore o riferimento. Anche se la classe e la struttura possono essere restituite dalla funzione tramite return. Potete anche restituire un riferimento o un puntatore a una classe, struttura o array.

 

Ho questo problema:

Quando cambio lo stoploss, di tanto in tanto non riesce a piazzare uno stop sull'ultimo ordine aperto. Succede abbastanza raramente, ma di tanto in tanto spunta fuori.

Non ho alcun errore nei prezzi. Solo una canaglia a volte non mette un ordine sull'ultima posizione, dopo di che l'ordine viene ricalcolato.

Puoi dirmi dove ho sbagliato?

//+-------------------------------------------------------------------------------------+
//|                        Управление StopLoss, TakeProfit                              |
//+-------------------------------------------------------------------------------------+
bool ProfitManagement()
{
double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
double StopLossSell = SellAP-Profit*Point;
double TakeProfitSell = SellAP - Profit*Point;
RefreshRates();
for(int good = 0; good < OrdersTotal(); good ++)     // Выбираем со всего массива ордеров
 {
 if(OrderSelect (good, SELECT_BY_POS, MODE_TRADES))             
 if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
 if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  //Выбираем ордера эксперта
   { 
//-------------------------Order Buy-----------------------------------------------------  
if (BuyCount >1)                                           //Если открыты длинные позиции
 {
 if (BuyAP < Bid)                                                //Если  мы идем по рынку  
 if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)           // Профит не равен нужному
 if (Bid - StopLossBuy > DedZone)                    // Уровень достаточно удален от цены
 if (WaitForTradeContext())                                // Свободен ли торговый поток?
 if (OrderType() == OP_BUY)                                        // Выбираем ордера Buy
 if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime))    // Изменяем StopLoss
  {
 Alert (Symbol()," Хрень со стопами! ",   GetLastError());
 return(false);
  }

// ну и далее по логике
 
yosuf:

È doloroso vedere i giganti del forum litigare per delle inezie. Questo è un forum di programmatori di una risorsa potente. Sii educato. Suggerimento:

1. Se viene fatto un tentativo di passare alle personalità, anche in modo surrettizio, bandite per 24 ore;

2. insultare una persona - divieto di una settimana;

3. insulti ripetuti con parolacce - un mese di divieto;

4.Ignorando tutti gli avvertimenti precedenti e ripetendo le violazioni in una forma dura - divieto perpetuo.


E il plotone d'esecuzione quando? Non ci sarà?
 
Limita:

Ho questo problema:

Quando cambio lo stoploss, di tanto in tanto non riesce a piazzare uno stop sull'ultimo ordine aperto. Succede abbastanza raramente, ma di tanto in tanto spunta fuori.

Non ho alcun errore nei prezzi. Solo una canaglia a volte non mette un ordine sull'ultima posizione, dopo di che l'ordine viene ricalcolato.

Per favore, consigliatemi dove ho sbagliato?

Spiegate questa sequenza a parole:

   //-------------------------Order Buy-----------------------------------------------------  
         if (BuyCount >1) {
            if (BuyAP < Bid)                                      //Если  мы идем по рынку, то выполнится следующая  
            if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)   // Профит не равен нужному
            if (Bid - StopLossBuy > DedZone)                      // Уровень достаточно удален от цены
            if (WaitForTradeContext())                            // Свободен ли торговый поток?
            if (OrderType() == OP_BUY)                            // Выбираем ордера Buy
            if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
               Alert (Symbol()," Хрень со стопами! ",   GetLastError());
               return(false);
            }

In parole povere, come direbbe a un compagno che è lontano dalla programmazione

 

Vogliamo guadagnare, per esempio, 50 pip per posizione. StopLoss uguale al nostro prezzo medio + 50 pip .

Se abbiamo una posizione lunga aperta, guadagniamo una certa quantità di denaro su di essa. Abbiamo impostato lo StopLoss a un certo livello. Lasciate che il mercato cresca ulteriormente. Se non stiamo ancora guadagnando abbastanza, aspettiamo finché non cominciamo a guadagnare abbastanza.

Apriamo un'altra posizione in direzione Buy. Se il prezzo medio cambia, cambiamo lo StopLoss.

E naturalmente impostiamo gli stop, seguiamo le regole di un broker (flusso di trading, livello di stop), altrimenti il broker non ci capirà :)))

Spero di essere riuscito a spiegare :))

 
Limita:

Vogliamo guadagnare, per esempio, 50 pip per posizione. StopLoss uguale al nostro prezzo medio + 50 pip .

Se abbiamo una posizione lunga aperta, guadagniamo una certa quantità di denaro su di essa. Abbiamo impostato lo StopLoss a un certo livello. Lasciate che il mercato cresca ulteriormente. Se non stiamo ancora guadagnando abbastanza, aspettiamo finché non cominciamo a guadagnare abbastanza.

Apriamo un'altra posizione in direzione Buy. Se il prezzo medio cambia, cambiamo lo StopLoss.

E naturalmente impostiamo gli stop, seguiamo le regole di un broker (flusso di trading, livello di stop), altrimenti il broker non ci capirà :)))

Spero di essere riuscito a spiegare :))

Sì... Intendevo - la logica di quelle linee ...

Hai una logica ambigua lì, dato che non ci sono parentesi graffe. Il che significa che non tutte le linee saranno soddisfatte se la condizione precedente è soddisfatta

 
Limita:

Ho questo problema:

Quando cambio lo stoploss, di tanto in tanto non riesce a piazzare uno stop sull'ultimo ordine aperto. Succede abbastanza raramente, ma di tanto in tanto spunta fuori.

Non ho alcun errore nei prezzi. Solo una canaglia a volte non mette un ordine sull'ultima posizione, dopo di che l'ordine viene ricalcolato.

Per favore, ditemi dove ho sbagliato?


for (int good = 0; good < OrdersTotal(); good ++){                                // Выбираем со всего массива ордеров
    }    

È meglio farlo in questo modo (qualcuno ha scritto che ha avuto problemi nel modificare o cancellare ordini con il tuo modo di fare):

for (int good = OrdersTotal()-1; good >= 0; good --){     // Выбираем со всего массива ордеров
    }  

E perché olio e burro? (lasciare una cosa in pace)

 if (OrderSymbol() != Symbol() || OrderMagicNumber() !=  MagicNumber) continue;
 if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber) {          //Выбираем ордера эксперта
    }
Motivazione: