OrdersTotal() dà il numero di posizioni già aperte, cioè potete usarlo per controllare se c'è già una posizione aperta o no.
Uso la funzione Terminal() del tutorial quando chiudo le posizioni, a condizione che Mas_Ord_New[0][0]!=0. Ma qui abbiamo un altro compito: dovremmo creare una bandiera che proibisca di negoziare con il segnale corrente se un ordine è già stato aperto da esso. Sto cercando di usare le bandiere, ma ho fatto un errore in qualche modo.
staticbool buy_1=true;
if(Stoch_Sig==4 && buy_l==true)
{
sl=Ask-Stop_Loss*Point;
Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
if(Ans==false)
Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
if(Ans==true)
buy_l=false; // снимем флаг, запрещаем торговать по данному сигналу
}
if(Stoch_Sig!=4 && buy_l==false) // поднимем флаг, сигнал сменился - торговать по нему можно опять
buy_l=true;
Salve. Ho una domanda sugli indicatori personalizzati. La descrizione di iCustom dice:
doppio iCustom(
simbolo stringa, int timeframe, nome stringa, ..., int mode, int shift)
Calcolo dell'indicatore personalizzato specificato. L'indicatore personalizzato deve essere compilato (file con estensione EX4) e collocato nelladirectory terminal_experts\indicators.
simbolo
-
Nome del simbolo, sui cui dati verrà calcolato l'indicatore. NULL significa simbolo corrente.
timeframe
-
Periodo. Può essere uno dei periodi del grafico. 0 significa il periodo del grafico corrente.
nome
-
Nome dell'indicatore personalizzato.
...
-
Elenco dei parametri (se necessario). I parametri trasmessi devono corrispondere all'ordine di dichiarazione e al tipo di variabili esterne (extern) dell'indicatore personalizzato.
modo
-
Indice della linea dell'indicatore. Può essere da 0 a 7 e dovrebbe corrispondere all'indice usato da una delle funzioni SetIndexBuffer.
turno
-
Indice del valore ottenuto dal buffer dell'indicatore (spostamento relativo alla barra corrente del numero specificato di periodi indietro).
Domanda: come ottenere il valore di "shift" (quando si chiama l'indicatore con uno shift, usa i valori come senza, cioèiCustom(NULL, 0, "nome",pam1,0,1)= iCustom(NULL, 0, "nome",pam1,0,100), ma se chiamo l'indicatore 100 barre fa, avrà un valore diverso da iCustom(NULL, 0, "nome",pam1,0,100). L'indicatore è semplice, usa 5 valori di chiusura precedenti e ne prende la media.
paladin80: Avete impostato la deviazione dalla linea principale a 0 (zero). Dovrebbe essere più di zero.
Reshetov: Imposteresti anche la deviazione in negativo?
Grazie, compagni! Esattamente! Ero troppo occupato a lavorare e non ne avevo idea. Avrei voluto cliccare semplicemente il pulsante di ringraziamento, per non moltiplicare. )
A proposito, sarebbe utile raccomandare ai neofiti di passare parametri agli indicatori tramite variabili con nomi eloquenti. Finora l'ho fatto, questa volta mi è sfuggito qualcosa.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.06.2007 |//| Описание : Удаление ордеров. Версия функции для тестов на истории. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL - текущий символ) |//| op - операция ( -1 - любой ордер) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+void DeleteOrders(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), ot;
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
if (OrderSymbol()==sy && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
OrderDelete(OrderTicket(), clDelete);
}
}
}
}
}
}
Ottengo errori--->
Tutte le variabili della funzione sono definite al suo interno... cosa c'è che non va?
copiato e incollato. --->
if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
{
DeleteOrders()
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.06.2007 |//| Описание : Удаление ордеров. Версия функции для тестов на истории. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL - текущий символ) |//| op - операция ( -1 - любой ордер) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+void DeleteOrders(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), ot;
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
if (OrderSymbol()==sy && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
OrderDelete(OrderTicket(), clDelete);
}
}
}
}
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.06.2007 |//| Описание : Удаление ордеров. Версия функции для тестов на истории. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL - текущий символ) |//| op - операция ( -1 - любой ордер) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+void DeleteOrders(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), ot;
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
if (OrderSymbol()==sy && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
OrderDelete(OrderTicket(), CLR_NONE);
}
}
}
}
}
}
Ma è sufficiente specificare un colore, per esempio -CLR_NONE.
In realtà, una tale condizione (High[2]==High[1]) o tale(Close[2]==High[1 ]) o tale(High[2]==Open[1 ]) è rara. Guarda il grafico, quante di queste coincidenze troverai?
Per quanto riguarda la logica della rimozione dell'ordine, ... - soffre anche, in breve.
OrdersTotal() dà il numero di posizioni già aperte, cioè potete usarlo per controllare se c'è già una posizione aperta o no.
Uso la funzione Terminal() del tutorial quando chiudo le posizioni, a condizione che Mas_Ord_New[0][0]!=0. Ma qui abbiamo un altro compito: dovremmo creare una bandiera che proibisca di negoziare con il segnale corrente se un ordine è già stato aperto da esso. Sto cercando di usare le bandiere, ma ho fatto un errore in qualche modo.
Parny ha bisogno di aiuto Cosa c'è
2012.09.10 18:40:20 '6257743': ordine buy 5.00 EURUSD apertura a 1.27816 sl: 1.27791 tp: 1.27876 fallito [S/L o T/P non valido]
Anche perché il prezzo e lo stop loss sono gli stessi:
Prezzo 1,25618 Stop Loss 1,25618 Take Profit 1,25698
Prendi profitto 60 pips
Stop Loss 20
Salve. Ho una domanda sugli indicatori personalizzati. La descrizione di iCustom dice:
Domanda: come ottenere il valore di "shift" (quando si chiama l'indicatore con uno shift, usa i valori come senza, cioèiCustom(NULL, 0, "nome",pam1,0,1)= iCustom(NULL, 0, "nome",pam1,0,100), ma se chiamo l'indicatore 100 barre fa, avrà un valore diverso da iCustom(NULL, 0, "nome",pam1,0,100). L'indicatore è semplice, usa 5 valori di chiusura precedenti e ne prende la media.
Vi sarò grato per il vostro aiuto.
Avete impostato la deviazione dalla linea principale a 0 (zero). Dovrebbe essere più di zero.
Imposteresti anche la deviazione in negativo?
Grazie, compagni! Esattamente! Ero troppo occupato a lavorare e non ne avevo idea. Avrei voluto cliccare semplicemente il pulsante di ringraziamento, per non moltiplicare. )
A proposito, sarebbe utile raccomandare ai neofiti di passare parametri agli indicatori tramite variabili con nomi eloquenti. Finora l'ho fatto, questa volta mi è sfuggito qualcosa.
Buona sera a tutti!
Volevo fare la stessa domanda e ho preso la funzione da qui https://www.mql5.com/ru/forum/131859
Ottengo errori--->
Tutte le variabili della funzione sono definite al suo interno... cosa c'è che non va?
copiato e incollato. --->
Non ci sono errori:
Ma è sufficiente specificare un colore, per esempio -CLR_NONE.E sembra che tu abbia questo 'appeso in aria':
In realtà, una tale condizione (High[2]==High[1 ]) o tale(Close[2]==High[1 ]) o tale(High[2]==Open[1 ]) è rara. Guarda il grafico, quante di queste coincidenze troverai?Per quanto riguarda la logica della rimozione dell'ordine, ... - soffre anche, in breve.
copiato il codice da qui e creato un nuovo progetto (EA) incollato il codice -> compilato
Stranamente, dà ancora gli stessi errori...
copiato il codice da qui e creato un nuovo progetto (EA) incollato il codice -> compilato
Stranamente, dà ancora gli stessi errori...