[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 935
Ciao, sono interessato a questa domanda. Alpari fornisce un server dove puoi caricare il tuo consulente in modo che possa lavorare 24 ore su 24? Sarebbe così gentile da rispondere di persona?
domanda sul cambio di periodo nel programma ... per esempio c'è una certa sequenza di operatori che deve essere applicata a diversi periodi ... come ho capito è più facile fare questo sotto forma di un ciclo ... cambiando il periodo... Ho trovato una funzione nella documentazione che restituisce il valore del periodo ... ma non riesco a trovare una funzione per cambiarlo ... cosa sto sbagliando?
Qualcosa non funziona per te, non questo codice... :)
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {// Объявление функции. Передаваемые параметры: sy = символ, op - тип, mn - магикdatetime t; // Переменная содержит время закрытия ордераdouble ocp, osl; // ocp - цена закрытия позиции, osl - цена СтопЛосс закрытой позицииint dg, i, j=-1, k=OrdersHistoryTotal(); // k содержит общее количество ордеров в историиif (sy=="0") sy=Symbol(); // Если в ф-цию передан sy равный 0 или NULL, то использовать символ графикаfor (i=0; i<k; i++) { // Цикл по массиву закрытых ордеровif (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { // Если выбран ордер из массива закрытых ордеров, ...if (OrderSymbol()==sy || sy=="") { // ... если его символ совпадает с нашим, ...if (OrderType()==OP_BUY || OrderType()==OP_SELL) { // ... если его тип Бай или Селл, ...if (op<0 || OrderType()==op) { // ... если тип ордера равен или -1 (имеется ввиду любой) или равен переданному в ф-цию, ...if (mn<0 || OrderMagicNumber()==mn) { // ... если его магик или любой (-1) или равен переданному в ф-цию (магику советника), ...if (t<OrderCloseTime()) { // ... если переменная t содержит время закрытия меньше, чем время закрытия выбранного ордера, то ...
t=OrderCloseTime(); // ... то присвоим переменной t время закрытия выбранного ордера (этот ордер закрыт позже предыдущего)
j=i; // Запишем в переменную j индекс найденного ордера с максимальным временем закрытия
}
}
}
}
}
}
} // По окончании цикла в переменной j находится индекс последнего закрытого ордераif (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { // Выберем его по индексу
dg=MarketInfo(sy, MODE_DIGITS); // Количество цифр после десятичного точки в цене инструмента, заданного переменной syif (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2; // Честно... точно не скажу, но вижу, что корректировка под йену
ocp=NormalizeDouble(OrderClosePrice(), dg); // Нормализуем цену закрытия ордера для дальнейшего сравнения с ценой СтопЛосс
osl=NormalizeDouble(OrderStopLoss(), dg); // Нормализуем цену СтопЛосс ордера для сравнения с ценой закрытияif (ocp==osl) return(True); // Если эти цены равны, значит поза закрыта по стопу, возвращаем значение "Истина"
}
return(False); // Возвращаем "Ложь"
}
Questa è tutta la logica... Viktor aveva ragione - è ridondante, ma il più semplice possibile... :)
Skopcheny: domanda su come cambiare il periodo nel programma ... per esempio c'è una certa sequenza di operatori che dovrebbero essere applicati a diversi periodi ... come ho capito è più facile farlo sotto forma di una linea temporale ... cambiando il periodo... Ho trovato una funzione nella documentazione che restituisce un valore di periodo... ma non riesco a trovare una funzione per cambiarlo... dove sbaglio?
Grazie mille, ho solo bisogno di alcuni chiarimenti ... per un gruppo di operatori per lavorare su un certo periodo è sufficiente specificare uno dei periodi davanti a loro come sono presentati in questa tabella?
Skopcheny: Grazie mille, ho solo bisogno di alcuni chiarimenti ... per un gruppo di operatori per lavorare su un certo periodo è sufficiente specificare uno dei periodi davanti a loro come sono presentati in questa tabella?
Per rispondere correttamente alla tua domanda, è necessario vedere almeno un esempio di codice in cui è necessario specificare il periodo...
artmedia70: Per dare la risposta giusta alla tua domanda, è necessario vedere almeno un codice di esempio dove si deve specificatamente impostare il periodo...
string trend() {int count,count_change; double bar_centr; string trend; bool clear; for (int i=10;i!=0;i--) { bar_centr = (High[i]-Low[i])/2+Low[i]); if (bar_centr>((High[i+1]-Low[i+1])/2+Low[i+1]) count++;
if (bar_centr<((High[i+1]-Low[i+1])/2+Low[i+1]) count--; }
if (count>3) trend="buy"; if (count<-3) trend="sell"; if (count<3||count>-3) trend="uncertain";
return(trend);}
questa funzione deve essere applicata una dopo l'altra a diversi periodi ... Funziona se lo collego a windows nel terminale con diversi intervalli di tempo ... La domanda è se è possibile per EA gestire diversi periodi...
questa funzione deve essere applicata successivamente a diversi periodi ... Funziona se collego l'EA a windows nel terminale con diversi periodi ... La domanda è se è possibile per EA gestire diversi periodi...
Capisco che tu voglia che la tua funzione lavori non solo con il grafico e il periodo correnti, ma con qualsiasi periodo che le è stato passato...
string trend(string sy="", int tf=0)
{
int count,count_change;
double bar_centr;
string trend;
bool clear;
if (sy=="" || sy=="0") sy=Symbol();
if (tf==0) tf=Period();
for (int i=10; i>0; i--)
{
bar_centr = (iHigh(sy,tf,i)-iLow(sy,tf,i))/2+iLow(sy,tf,i);
if (bar_centr>((iHigh(sy,tf,i+1)-iLow(sy,tf,i+1))/2+iLow(sy,tf,i+1)))
count++;
if (bar_centr<((iHigh(sy,tf,i+1)-iLow(sy,tf,i+1))/2+iLow(sy,tfi+1)))
count--;
}
Print (count,"период ",tf);
if (count>3) trend="покупка";
if (count<-3) trend="продажа";
if (count<3||count>-3) trend="неопределенность";
return(trend);
}
Ora, chiamate la vostra funzione in questo modo
trend(Symbol(), Period()); // Restituirà i valori del grafico e del periodo in cui l'EA è in bilico...
trend(USDJPY, PERIOD_D1); // Restituisce i valori per il simbolo USDJPY e il periodo di "1 giorno".
Invece di PERIOD_D1 potete inserire 1440 - darà lo stesso risultato...
Se viene chiamata senza parametri, la funzione restituisce i valori per il simbolo corrente e il periodo (sono impostati di default)
Ciao, sono interessato a questa domanda. Alpari fornisce un server dove puoi caricare il tuo consulente in modo che possa lavorare 24 ore su 24? Sarebbe così gentile da rispondere di persona?
Non funziona, forse devo cambiare qualcosa qui o metterlo dopo l'inizio.
Ho provato a tradurre il tuo codice su carta in russo che capisco, ma non funziona,
è troppo complicato, soprattutto quando le condizioni di ogni condizione si susseguono, e una condizione su otto condizioni.
Naturalmente non discuto che chi ha creato questo codice sia un miracolo, ma per me è una perversione completa (in senso buono)
Non sono pigro per aggiungere commenti ad ogni operazione e condizione, tranne che per la funzione standard.
C'è qualche ridondanza nel codice, ma il codice è leggibile
Qualcosa non funziona per te, non questo codice... :)
Questa è tutta la logica... Viktor aveva ragione - è ridondante, ma il più semplice possibile... :)
domanda su come cambiare il periodo nel programma ... per esempio c'è una certa sequenza di operatori che dovrebbero essere applicati a diversi periodi ... come ho capito è più facile farlo sotto forma di una linea temporale ... cambiando il periodo... Ho trovato una funzione nella documentazione che restituisce un valore di periodo... ma non riesco a trovare una funzione per cambiarlo... dove sbaglio?
Il periodo del grafico può essere uno qualsiasi dei seguenti valori:
Grazie mille, ho solo bisogno di alcuni chiarimenti ... per un gruppo di operatori per lavorare su un certo periodo è sufficiente specificare uno dei periodi davanti a loro come sono presentati in questa tabella?
Per dare la risposta giusta alla tua domanda, è necessario vedere almeno un codice di esempio dove si deve specificatamente impostare il periodo...
string trend()
{int count,count_change;
double bar_centr;
string trend;
bool clear;
for (int i=10;i!=0;i--)
{
bar_centr = (High[i]-Low[i])/2+Low[i]);
if (bar_centr>((High[i+1]-Low[i+1])/2+Low[i+1])
count++;
if (bar_centr<((High[i+1]-Low[i+1])/2+Low[i+1])
count--;
}
Print (count, "period ",Period());
if (count>3) trend="buy";
if (count<-3) trend="sell";
if (count<3||count>-3) trend="uncertain";
return(trend);}
questa funzione deve essere applicata una dopo l'altra a diversi periodi ... Funziona se lo collego a windows nel terminale con diversi intervalli di tempo ... La domanda è se è possibile per EA gestire diversi periodi...
questa funzione deve essere applicata successivamente a diversi periodi ... Funziona se collego l'EA a windows nel terminale con diversi periodi ... La domanda è se è possibile per EA gestire diversi periodi...
Capisco che tu voglia che la tua funzione lavori non solo con il grafico e il periodo correnti, ma con qualsiasi periodo che le è stato passato...
Ora, chiamate la vostra funzione in questo modo
trend(Symbol(), Period()); // Restituirà i valori del grafico e del periodo in cui l'EA è in bilico...
trend(USDJPY, PERIOD_D1); // Restituisce i valori per il simbolo USDJPY e il periodo di "1 giorno".
Invece di PERIOD_D1 potete inserire 1440 - darà lo stesso risultato...
Se viene chiamata senza parametri, la funzione restituisce i valori per il simbolo corrente e il periodo (sono impostati di default)
Capisco che tu voglia che la funzione lavori non solo con il grafico e il periodo correnti, ma con qualsiasi grafico passato ad essa...
Ora chiamate la vostra funzione in questo modo:
trend(Symbol(), Period()); // Restituirà i valori del grafico e del periodo in cui l'EA è in bilico...
trend(USDJPY, PERIOD_D1); // Restituisce i valori per il simbolo USDJPY e il periodo di "1 giorno".
Invece di PERIOD_D1 potete inserire 1440 - è lo stesso...
risposta esauriente... grazie mille ...