Grazie, Sergey, per la tua risposta! La sua risposta mi ha lasciato ancora più perplesso. Come può essere? Quando eseguo lo script, tutti gli ordini pendenti impostati vengono interrogati. Come possiamo vedere nell'immagine, ce ne sono due sul grafico, e allo stesso tempo, un biglietto è selezionato e l'altro no? Non è del tutto chiaro.
Puoi spiegarlo in modo più dettagliato?
Faccio questa domanda non per pura curiosità, ma per continuare l'auto-apprendimento.
Saluti, Vladimir.
Qui, avete un ciclo in cui cambiate l'iteratore i dall'indice massimo a 0. Cosa succede dentro? Bene, ecco cosa succede: il primo comando che prova a ottenere il parametro ORDER_SYMBOL. Ma da quale ordine stai cercando di ottenerlo, perché l'ordine sarà selezionato tre righe sotto!
Sergey Gridnev #: Quindi, avete un ciclo in cui cambiate l'iteratore i dall'indice massimo a 0. Cosa sta succedendo al suo interno? Bene, ecco cosa succede: al primo comando si cerca di ottenere il parametro ORDER_SYMBOL. Ma, da quale ordine stai cercando di ottenerlo, perché l'ordine sarà selezionato tre righe sotto!
Grazie, Sergey, per la spiegazione molto dettagliata e comprensibile! Ho messo la linea con il biglietto dell'ordine pendente subito dopo l'inizio del ciclo e tutto ha funzionato bene.
Sì... Prestate attenzione e prestate attenzione ancora una volta. Questo è quello che mi manca davvero. Grazie ancora!
Oggi ho affrontato altri due problemi che non capisco, ma in un codice interamente preso da MQL5 Reference. Questa volta non ho scritto niente io, ma ho solo preso un esempio già pronto.
Apro MQL5 Reference / Constants, Enumerations and Structures / Data Structures / Structure of a Trade Request. Lo trovo lì:
Struttura della richiesta di scambio
Modify Pending Order
Торговый приказ на модификацию уровней цен отложенного ордера. Требуется указание 7 полей:
action
order
price
sl
tp
type_time
expiration
Пример торговой операции TRADE_ACTION_MODIFY для модификации уровней цен отложенного ордера:
Questo è chiaro. Sono seguito da un esempio con il seguente codice:
#define EXPERT_MAGIC 123456// MagicNumber эксперта//+------------------------------------------------------------------+//| Модификация отложенных ордеров |//+------------------------------------------------------------------+voidOnStart()
{
//-- объявление и инициализация запроса и результатаMqlTradeRequest request={};
MqlTradeResult result={};
int total=OrdersTotal(); // количество установленных отложенных ордеров//--- перебор всех установленных отложенных ордеровfor(int i=0; i<total; i++)
{
//--- параметры ордераulong order_ticket=OrderGetTicket(i); // тикет ордераstring order_symbol=Symbol(); // символint digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS); // количество знаков после запятойulong magic=OrderGetInteger(ORDER_MAGIC); // MagicNumber ордераdouble volume=OrderGetDouble(ORDER_VOLUME_CURRENT); // текущий объем ордераdouble sl=OrderGetDouble(ORDER_SL); // текущий Stop Loss ордераdouble tp=OrderGetDouble(ORDER_TP); // текущий Take Profit ордераENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордераint offset = 50; // отступ от текущей цены для установки ордера, в пунктахdouble price; // цена срабатывания ордераdouble point=SymbolInfoDouble(order_symbol,SYMBOL_POINT); // размер пункта//--- вывод информации об ордереPrintFormat("#%I64u %s %s %.2f %s sl: %s tp: %s [%I64d]",
order_ticket,
order_symbol,
EnumToString(type),
volume,
DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),DoubleToString(sl,digits),
DoubleToString(tp,digits),
magic);
//--- если MagicNumber совпадает, Stop Loss и Take Profit не заданыif(magic==EXPERT_MAGIC && sl==0 && tp==0)
{
request.action=TRADE_ACTION_MODIFY; // тип торговой операции
request.order = OrderGetTicket(i); // тикет ордера
request.symbol =Symbol(); // символ
request.deviation=5; // допустимое отклонение от цены//--- установка уровня цены, тейк-профит и стоп-лосс ордера в зависимости от его типаif(type==ORDER_TYPE_BUY_LIMIT)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point;
request.tp = NormalizeDouble(price+offset*point,digits);
request.sl = NormalizeDouble(price-offset*point,digits);
request.price =NormalizeDouble(price,digits); // нормализованная цена открытия
}
elseif(type==ORDER_TYPE_SELL_LIMIT)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point;
request.tp = NormalizeDouble(price-offset*point,digits);
request.sl = NormalizeDouble(price+offset*point,digits);
request.price =NormalizeDouble(price,digits); // нормализованная цена открытия
}
elseif(type==ORDER_TYPE_BUY_STOP)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point;
request.tp = NormalizeDouble(price+offset*point,digits);
request.sl = NormalizeDouble(price-offset*point,digits);
request.price =NormalizeDouble(price,digits); // нормализованная цена открытия
}
elseif(type==ORDER_TYPE_SELL_STOP)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point;
request.tp = NormalizeDouble(price-offset*point,digits);
request.sl = NormalizeDouble(price+offset*point,digits);
request.price =NormalizeDouble(price,digits); // нормализованная цена открытия
}
//--- отправка запросаif(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки//--- информация об операции PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
//--- обнуление значений запроса и результатаZeroMemory(request);
ZeroMemory(result);
}
}
}
//+------------------------------------------------------------------+
Sto cercando di capire la linea evidenziata in giallo. Una domanda sorge subito: cosa c'entraPositionGetDouble(POSITION_PRICE_OPEN) se questo esempio si riferisce agli ordini pendenti? Forse dovrebbe esserci una linea come questa:
Questa è la prima cosa. Il secondo problema si presenta quando cerco di eseguire questo script su un grafico con un ordine pendente BUY_STOP che ho impostato (anche se tutto ciò che è simile accade per altri tipi di ordini pendenti). Quindi, cosa succede? Non succede niente! Non vedo alcuna modifica di un ordine pendente. Forse non capisco qualcosa?
Sasha, non puoi pensare a niente dipeggio che usare esempi dalla documentazione o esempi tumblr. E avete anche perso il flag di terminazione forzata del ciclo while da qualche parte. Tutto sommato... senza parole.
Dubito che gli esempi scritti nella documentazione e persino nella libreria standard siano controllati a fondo. Ci sono molti errori di questo tipo. Gli esempi, secondo me, possono essere usati solo come campioni...
Dubito che gli esempi scritti nella documentazione e persino la libreria standard siano controllati a fondo. Ci sono molti errori di questo tipo. Gli esempi, secondo me, possono essere usati solo come esempi...
Ciao Alexey!
È molto triste che un'azienda così seria abbia un atteggiamento così povero nei confronti dei manuali.
È molto triste che un'azienda così seria abbia un atteggiamento così poco serio nei confronti del manuale.
Sinceramente, Vladimir.
C'è un altro errore in questo esempio. O completamente cieco.
Tra i campi obbligatori elencati c'è una scadenza, ma nel codice dell'esempio non vedo dove viene assegnata la scadenza. Invece, viene assegnata la deviazione ammissibile dal prezzo.
C'è ancora un errore in questo esempio. O sono diventato completamente cieco...
Tra i campi obbligatori elencati c'è la scadenza, ma nel codice di esempio non vedo dove viene assegnata la scadenza. Invece, viene specificata la deviazione ammissibile dal prezzo.
Non solo il tempo di scadenza, ma dovrebbe essere anche lì:
Типы торговых операций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Grazie per il suggerimento, Alexey! Aspetterò prima la risposta in questo thread, ma se non succede nulla, lo segnalerò nel topic Errori, bug, domande.
Grazie, Sergey, per la tua risposta! La sua risposta mi ha lasciato ancora più perplesso. Come può essere? Quando eseguo lo script, tutti gli ordini pendenti impostati vengono interrogati. Come possiamo vedere nell'immagine, ce ne sono due sul grafico, e allo stesso tempo, un biglietto è selezionato e l'altro no? Non è del tutto chiaro.
Puoi spiegarlo in modo più dettagliato?
Faccio questa domanda non per pura curiosità, ma per continuare l'auto-apprendimento.
Saluti, Vladimir.
Quindi, avete un ciclo in cui cambiate l'iteratore i dall'indice massimo a 0. Cosa sta succedendo al suo interno? Bene, ecco cosa succede: al primo comando si cerca di ottenere il parametro ORDER_SYMBOL. Ma, da quale ordine stai cercando di ottenerlo, perché l'ordine sarà selezionato tre righe sotto!
Grazie, Sergey, per la spiegazione molto dettagliata e comprensibile! Ho messo la linea con il biglietto dell'ordine pendente subito dopo l'inizio del ciclo e tutto ha funzionato bene.
Sì... Prestate attenzione e prestate attenzione ancora una volta. Questo è quello che mi manca davvero. Grazie ancora!
Sinceramente, Vladimir.
Buongiorno, stimati esperti!
Oggi ho affrontato altri due problemi che non capisco, ma in un codice interamente preso da MQL5 Reference. Questa volta non ho scritto niente io, ma ho solo preso un esempio già pronto.
Apro MQL5 Reference / Constants, Enumerations and Structures / Data Structures / Structure of a Trade Request. Lo trovo lì:
Struttura della richiesta di scambioQuesto è chiaro. Sono seguito da un esempio con il seguente codice:
Sto cercando di capire la linea evidenziata in giallo. Una domanda sorge subito: cosa c'entra PositionGetDouble(POSITION_PRICE_OPEN) se questo esempio si riferisce agli ordini pendenti? Forse dovrebbe esserci una linea come questa:
Lo trovo solo nella scheda Esperti: Cari esperti, per favore aiutatemi a capire questo esempio, perché è nella directory, ma il suo codice non funziona?
Saluti, Vladimir.
Cari esperti, per favore aiutatemi a capire questo esempio, perché è nel libro di riferimento, ma il suo codice non funziona?
Sinceramente, Vladimir.
Ne ho scritto qualche pagina fa.
Questo è il forum per il trading, i sistemi di trading automatico e il test delle strategie.
Tutte le domande dei neofiti su MQL4 e MQL5, aiuto e discussione di algoritmi e codici
Alexey Viktorov, 2022.02.20 10:24
Sasha, non puoi pensare a niente di peggio che usare esempi dalla documentazione o esempi tumblr. E avete anche perso il flag di terminazione forzata del ciclo while da qualche parte. Tutto sommato... senza parole.Ho scritto su questo qualche pagina fa
Ciao Alexey!
È molto triste che un'azienda così seria abbia un atteggiamento così povero nei confronti dei manuali.
Sinceramente, Vladimir.
Ciao Alexey!
È molto triste che un'azienda così seria abbia un atteggiamento così poco serio nei confronti del manuale.
Sinceramente, Vladimir.
C'è un altro errore in questo esempio. O completamente cieco.
Tra i campi obbligatori elencati c'è una scadenza, ma nel codice dell'esempio non vedo dove viene assegnata la scadenza. Invece, viene assegnata la deviazione ammissibile dal prezzo.
C'è ancora un errore in questo esempio. O sono diventato completamente cieco...
Tra i campi obbligatori elencati c'è la scadenza, ma nel codice di esempio non vedo dove viene assegnata la scadenza. Invece, viene specificata la deviazione ammissibile dal prezzo.
Non solo il tempo di scadenza, ma dovrebbe essere anche lì:
Sinceramente, Vladimir.
Non solo, ma ci dovrebbe essere anche un tempo di scadenza:
Sinceramente, Vladimir.
Mi rivolgo ad Artem Trishkin, il moderatore e organizzatore di questo ramo!
Da parte vostra, avete la possibilità di passare tutte le domande relative alla guida MQL5 a MQL?
Se non è troppo disturbo, puoi aggiornare almeno questa pagina?
Sinceramente, Vladimir.Mi rivolgo ad Artem Trishkin, il moderatore e organizzatore di questo thread!
Da parte vostra, avete la possibilità di passare a MQL5 tutte le domande relative alla Guida MQL5?
Se non ti dispiace, almeno questa pagina può essere aggiornata?
Con rispetto, Vladimir.Puoi anche segnalarlo in questo thread.
Puoi segnalarlo anche in questo thread.
Grazie per il suggerimento, Alexey! Aspetterò prima la risposta in questo thread, ma se non succede nulla, lo segnalerò nel topic Errori, bug, domande.
Sinceramente, Vladimir.