[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 567
Uso diverse funzioni definite dall'utente nel mio Expert Advisor. Come posso fare in modo che queste funzioni siano combinate in una libreria, e nel corpo dell'Expert Advisor semplicemente chiamarle da lì.
Non ho familiarità con la sintassi della lingua a questo proposito.
Si prega di fare riferimento alla documentazione o alla sezione dei tutorial. Non l'ho trovato lì.
Come scrivere una funzione che controlli se una posizione è o è stata aperta sulla barra zero (preferibilmente una scelta di timeframe. OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1), o questa funzione lo fa. Come ho capito, restituisce solo -1 se la posizione è aperta al momento, ma se è stata aperta e già chiusa.
//+----------------------------------------------------------------------------+ //| Restituisce il numero di barra dell'ultima posizione aperta o -1. | //| Parametri: | //| sym - nome dello strumento ("" - simbolo corrente) | //| tf - timeframe ( 0 - timeframe corrente) | //| op - operazione (-1 - qualsiasi posizione) | //| mn - MagicNumber (-1 - qualsiasi magia) | //+----------------------------------------------------------------------------+ int NumberOfBarLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal();
Abbiamo bisogno di due cicli. Nel primo si passa attraverso la storia degli ordini, nel secondo si passa attraverso gli ordini correnti. In entrambi i casi, se il tempo di apertura dell'ordine è maggiore o uguale a Time[0], allora l'ordine è stato aperto sulla candela corrente. Questo è vero per tutti i tempi.
drknn>>: Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.
Grazie per aver cliccato. Potresti chiedere questo nel codice
Ciao gente, aiutatemi a capire il codice dopo che funziona un sacco di spazzatura è rimasto sul grafico frecce cerchi della linea come rimuoverli o così si rimuove qui è parte del codice
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
Oppure ecco una funzione che controlla se una posizione è stata aperta sulla barra corrente (con un controllo su OrdersTotal() e OrdersHistoryTotal() ). Restituisce true se è stato aperto un ordine di tipo.
bool CheckExists(int Type)
{
bool Result = True;
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS))
if(OrderType() == Type && OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
if(OrderOpenTime() >= Time[0])
Result = False;
for(i = 0; i < OrdersHistoryTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
if(OrderType() == Type && OrderOpenTime() >= Time[0]
&& OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
Result = False;
}
return(Result);
}
Un'altra domanda da un principiante.
Uso diverse funzioni definite dall'utente nel mio Expert Advisor. Come posso fare in modo che queste funzioni siano combinate in una libreria, e nel corpo dell'Expert Advisor semplicemente chiamarle da lì.
Non ho familiarità con la sintassi della lingua a questo proposito.
Si prega di fare riferimento alla documentazione o alla sezione dei tutorial. Non l'ho trovato lì.
https://book.mql4.com/ru/build/structure
https://www.mql5.com/ru/articles/1462
+ per finire... https://book.mql4.com/ru/appendix/examples
Come scrivere una funzione che controlli se una posizione è o è stata aperta sulla barra zero (preferibilmente una scelta di timeframe. OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1), o questa funzione lo fa. Come ho capito, restituisce solo -1 se la posizione è aperta al momento, ma se è stata aperta e già chiusa.
//+----------------------------------------------------------------------------+
//| Restituisce il numero di barra dell'ultima posizione aperta o -1. |
//| Parametri: |
//| sym - nome dello strumento ("" - simbolo corrente) |
//| tf - timeframe ( 0 - timeframe corrente) |
//| op - operazione (-1 - qualsiasi posizione) |
//| mn - MagicNumber (-1 - qualsiasi magia) |
//+----------------------------------------------------------------------------+
int NumberOfBarLastPos(string sym="", int tf=0, int op=-1, int mn=-1)
{
datetime oot;
int i, k=OrdersTotal();
if(sym=="")
sym=Symbol();
for(i=0; ik; i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==sym)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op0 || OrderType()==op)
{
if(mn0 || OrderMagicNumber()==mn)
{
if(ootOrderOpenTime()) oot=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sym, tf, oot, True));
}
//+----------------------------------------------------------------------------+
Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.
Grazie per aver cliccato. Potresti chiedere questo nel codice
Спадибо, что аткликнулся. А можно попросить это в коде
Ecco un esempio di un passaggio di storia
Cercate di inventare il vostro codice, tanto più che avete l'algoritmo e un esempio già pronto davanti a voi.
ObjectDelete(a_name_0);
ObjectCreate(a_name_0, OBJ_ARROW, a_window_8, a_datetime_12, a_price_20);
ObjectSet(a_name_0, OBJPROP_ARROWCODE, ai_28);
ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32);
ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_36);
}
void _setabuy(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), Bid + 15.0 * Point, SYMBOL_ARROWUP, Blue, 2);
gi_120++;
}
void _setasell(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), Bid - 15.0 * Point, SYMBOL_ARROWDOWN, Red, 2);
gi_120++;
}
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
Grazie. Farò un tentativo.
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
Oppure ecco una funzione che controlla se una posizione è stata aperta sulla barra corrente (con un controllo su OrdersTotal() e OrdersHistoryTotal() ). Restituisce true se è stato aperto un ordine di tipo.
Per favore, ditemi come implementare la condizione.
Se (ci sono ordini pendenti) allora fate questo e quello;