Piazzare un ordine di compravendita per l'esecuzione in condizioni specificate (ordine pendente)
Esempio dell'operazione TRADE_ACTION_PENDING per piazzare un ordine in sospeso:
#property description"Example of placing pending orders"#property script_show_inputs#define EXPERT_MAGIC 123456// MagicNumber of the expertinputENUM_ORDER_TYPE orderType=ORDER_TYPE_BUY_LIMIT; // order type//+------------------------------------------------------------------+//| Placing pending orders |//+------------------------------------------------------------------+voidOnStart()
{
//--- declare and initialize the trade request and result of trade requestMqlTradeRequest request={0};
MqlTradeResult result={0};
//--- parameters to place a pending order
request.action =TRADE_ACTION_PENDING; // type of trade operation
request.symbol =Symbol(); // symbol
request.volume =0.1; // volume of 0.1 lot
request.deviation=2; // allowed deviation from the price
request.magic =EXPERT_MAGIC; // MagicNumber of the orderint offset = 50; // offset from the current price to place the order, in pointsdouble price; // order triggering pricedouble point=SymbolInfoDouble(_Symbol,SYMBOL_POINT); // value of pointint digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // number of decimal places (precision)//--- checking the type of operationif(orderType==ORDER_TYPE_BUY_LIMIT)
{
request.type =ORDER_TYPE_BUY_LIMIT; // order type
price=SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point; // price for opening
request.price =NormalizeDouble(price,digits); // normalized opening price
}
elseif(orderType==ORDER_TYPE_SELL_LIMIT)
{
request.type =ORDER_TYPE_SELL_LIMIT; // order type
price=SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; // price for opening
request.price =NormalizeDouble(price,digits); // normalized opening price
}
elseif(orderType==ORDER_TYPE_BUY_STOP)
{
request.type =ORDER_TYPE_BUY_STOP; // order type
price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; // price for opening
request.price=NormalizeDouble(price,digits); // normalized opening price
}
elseif(orderType==ORDER_TYPE_SELL_STOP)
{
request.type =ORDER_TYPE_SELL_STOP; // order type
price=SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point; // price for opening
request.price =NormalizeDouble(price,digits); // normalized opening price
}
elseAlert("This example is only for placing pending orders"); // if not pending order is selected//--- send the requestif(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // if unable to send the request, output the error code//--- information about the operationPrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
}
//+------------------------------------------------------------------+
Artyom Trishkin: Vladimir, non puoi scriverlo in russo?
Non si può. Perché ho citato per intero il riferimento. Altrimenti, è un azzardo: tutti hanno un "biglietto" e alcuni hanno "biglietti". Ecco perché le funzioni, l'aiuto e le citazioni dell'aiuto sono in inglese.
Non si può. Perché ho citato per intero il riferimento. Altrimenti, è un azzardo: tutti hanno un "biglietto" e alcuni hanno "biglietti". Pertanto, le funzioni, il riferimento e le citazioni nel riferimento sono in inglese.
E hanno "biglietti" solo perché iniziano a tradurre con google :)
Nell'aiuto ufficiale russo, ci sono dei "biglietti".
Ciao a tutti! Penso che la domanda sia principalmente per i professionisti (come risulta). È passata una settimana con una sola domanda sul codice.
Per esempio - sappiamo che la candela M5 contiene 5 candele M1 (per esempio, 00:00, 00:01, 00:02, 00:03 e 00:04). Inoltre considereremo solo questa congiunzione - cioè eseguiamo l'indicatore su M1 e vogliamo vedere le letture dell'indicatore da M5.
Cioè, per visualizzare correttamente i dati del TF centrale su quello inferiore, dovrei fare un ciclo di tutte le 5 barre del TF inferiore man mano che appaiono. Cioè la prima barra appare 00:00, poi 00:01 ecc. fino a 00:04 e dopo appare la successiva. Significa che il ciclo dovrebbe essere da 0 a 4 - questo è il massimo, mentre i vuoti nella storia non sono considerati. Il problema è che ottengo il ciclo da 0 a 5, e non ho abbastanza logica per arrivare a 4! Credetemi, sto lottando con questo da una settimana e sto davvero chiedendo il vostro aiuto. Qui sotto c'è un codice molto troncato dove il ciclo va a 5 invece che a 4. Voglio che sia 4!!!!!
#property copyright""#property link""#property version""#property indicator_chart_window//+----------------------------------------------+//| Входные параметры индикатора |//+----------------------------------------------+inputENUM_TIMEFRAMES TF=PERIOD_M5;
int LastCountBar;
datetime tt;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, // количество истории в барах на текущем тикеconstint prev_calculated,// количество истории в барах на предыдущем тикеconstdatetime &time[],
constdouble &open[],
constdouble& high[], // ценовой массив максимумов цены для расчёта индикатораconstdouble& low[], // ценовой массив минимумов цены для расчёта индикатораconstdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
datetime IndTime[1];
//--- объявления локальных переменныхint limit,bar;
//--- индексация элементов в массивах как в таймсерияхArraySetAsSeries(time,true);
//--- расчёт стартового номера first для цикла пересчёта баровif(prev_calculated>rates_total || prev_calculated<=0) // проверка на первый старт расчёта индикатора
{
limit=100; // стартовый номер для расчёта всех баров
LastCountBar=limit;
}
else
limit=LastCountBar+rates_total-prev_calculated; // стартовый номер для расчёта новых баров//--- основной цикл расчёта индикатораfor(bar=limit; bar>=0; bar--)
{
//--- копируем вновь появившиеся данные в массив IndTimeif(CopyTime(Symbol(),TF,time[bar],1,IndTime)<=0)
return(0);
if(time[bar]>=IndTime[0] && time[bar+1]<IndTime[0])
{
LastCountBar=bar;
//--- Далее проводим вычисления индикатора МТФ ...............Print(bar," ",IndTime[0]);
//---
}
}
return(rates_total);
}
//+------------------------------------------------------------------+
Ho la libreria di cui sopra. Voglio aggiungere una casella di modifica con un'etichetta all'interno di questa lista. Puoi dirmi come posso farlo? Ho provato, ma non funziona.
La domanda è questa. Posso aprire 2 (o più) grafici al tocco di un pulsante in modo che siano posizionati verticalmente, occupando equamente tutto il monitor?
ENUM_TRADE_REQUEST_ACTIONS
Identificatore
Descrizione
AFFARE_AZIONE_COMMERCIALE
Piazzare un ordine di compravendita per un'esecuzione immediata con i parametri specificati (ordine di mercato)
AZIONE_COMMERCIALE_IN SOSPESO
Piazzare un ordine di compravendita per l'esecuzione in condizioni specificate (ordine pendente)
Esempio dell'operazione TRADE_ACTION_PENDING per piazzare un ordine in sospeso:
ENUM_TRADE_REQUEST_ACTIONS
Identificatore
Descrizione
AFFARE_AZIONE_COMMERCIALE
Piazzare un ordine di compravendita per un'esecuzione immediata con i parametri specificati (ordine di mercato)
AZIONE_COMMERCIALE_IN SOSPESO
Piazzare un ordine di compravendita per l'esecuzione in condizioni specificate (ordine pendente)
Grazie!
Esempio dell'operazione TRADE_ACTION_PENDING per piazzare un ordine in sospeso:
Vladimir, non puoi scriverlo in russo?
Non si può. Perché ho citato per intero il riferimento. Altrimenti, è un azzardo: tutti hanno un "biglietto" e alcuni hanno "biglietti". Ecco perché le funzioni, l'aiuto e le citazioni dell'aiuto sono in inglese.
Non si può. Perché ho citato per intero il riferimento. Altrimenti, è un azzardo: tutti hanno un "biglietto" e alcuni hanno "biglietti". Pertanto, le funzioni, il riferimento e le citazioni nel riferimento sono in inglese.
Ciao a tutti! Penso che la domanda sia principalmente per i professionisti (come risulta). È passata una settimana con una sola domanda sul codice.
Per esempio - sappiamo che la candela M5 contiene 5 candele M1 (per esempio, 00:00, 00:01, 00:02, 00:03 e 00:04). Inoltre considereremo solo questa congiunzione - cioè eseguiamo l'indicatore su M1 e vogliamo vedere le letture dell'indicatore da M5.
Cioè, per visualizzare correttamente i dati del TF centrale su quello inferiore, dovrei fare un ciclo di tutte le 5 barre del TF inferiore man mano che appaiono. Cioè la prima barra appare 00:00, poi 00:01 ecc. fino a 00:04 e dopo appare la successiva. Significa che il ciclo dovrebbe essere da 0 a 4 - questo è il massimo, mentre i vuoti nella storia non sono considerati. Il problema è che ottengo il ciclo da 0 a 5, e non ho abbastanza logica per arrivare a 4! Credetemi, sto lottando con questo da una settimana e sto davvero chiedendo il vostro aiuto. Qui sotto c'è un codice molto troncato dove il ciclo va a 5 invece che a 4. Voglio che sia 4!!!!!
Come si aggiunge una finestra di modifica della vista elenco?
https://www.mql5.com/en/docs/standardlibrary/controls/clistview
Ho la libreria di cui sopra. Voglio aggiungere una casella di modifica con un'etichetta all'interno di questa lista. Puoi dirmi come posso farlo? Ho provato, ma non funziona.
E hanno "biglietti" solo perché iniziano a tradurre con google :)
OK, lo confesso: mi ha preso. Ha risposto rapidamente e non ha cambiato la lingua dell'aiuto 😎
Ricevuto ;)