alex12: Sto cercando di sintetizzare l'analisi del movimento dei prezzi e la gestione dell'attenzione della nlp, e il mio cervello ha il pilota automatico :)
Nella ricerca dell'illuminazione, la cosa principale è scegliere le sostanze giuste per non volare troppo lontano
Troverà sempre un ordine con numero zero (che è i-1). Questo è un metodo selvaggio per determinare l'ordine "successivo", che è veramente fuorviante...
Se non ci sono ordini allora con questo disegno:
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{
if (OrderSymbol()!= Symb) continue;
non passerà alla condizione successiva.
perché non c'è ordine e-1 (nel nostro caso =0)
Naturalmente, non è conveniente scriverlo in questo modo e non è chiaro perché dovrebbe essere così,
e non, per esempio, in questo modo:
for(int i=0; i<OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующий
{
if (OrderSymbol()!= Symb) continue;
Ciao signor programmatori, ho una domanda, non riesco a imparare una parte del codice per chiudere la percentuale del saldo del conto. si chiude non la percentuale ma tutti in una volta e tutti gli ordini che sono nel mercato. ho bisogno che si chiuda un ordine specifico e la percentuale calcolata del saldo del deposito.consiglio cosa faccio male?
Naturalmente, non è conveniente scriverlo in questo modo e non è chiaro perché dovrebbe essere così,
e non, per esempio, così:
Quando lo stavo leggendo, ho anche pensato perché non mettere semplicemente i=0, sembra essere più semplice e più chiaro.
Ecco l'intero codice dello script, forse c'è una buona ragione per cui l'autore ha messo i=1 invece di i=0. Solo che non ne so abbastanza e potrei semplicemente non vederlo, mentre ho bisogno di capire il meccanismo di funzionamento per non sollevare domande in seguito
// closeorder.mq4// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------- 1 --int start() // Спец.функция start
{
string Symb=Symbol(); // Финанс. инструментdouble Dist=1000000.0; // Предустановкаint Real_Order=-1; // Пока рыночных нетdouble Win_Price=WindowPriceOnDropped(); // Здесь брошен скрипт//--------------------------------------------------------------- 2 --for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров://------------------------------------------------------ 3 --if (OrderSymbol()!= Symb) continue; // Не наш фин.инструм.int Tip=OrderType(); // Тип ордераif (Tip>1) continue; // Отложенный ордер //------------------------------------------------------ 4 --double Price=OrderOpenPrice(); // Цена ордераif (NormalizeDouble(MathAbs(Price-Win_Price),Digits)< //ВыборNormalizeDouble(Dist,Digits)) // самого близкого орд
{
Dist=MathAbs(Price-Win_Price); // Новое значение
Real_Order=Tip; // Есть рыночный ордерint Ticket=OrderTicket(); // Номер ордераdouble Lot=OrderLots(); // Количество лотов
}
//------------------------------------------------------ 5 --
} //Конец анализа ордера
} //Конец перебора орд.//--------------------------------------------------------------- 6 --while(true) // Цикл закрытия орд.
{
if (Real_Order==-1) // Если рыночных нет
{
Alert("По ",Symb," рыночных ордеров нет");
break; // Выход из цикла закр
}
//--------------------------------------------------------- 7 --switch(Real_Order) // По типу ордера
{
case0: double Price_Cls=Bid; // Ордер Buystring Text="Buy "; // Текст для Buybreak; // Из switchcase1: Price_Cls=Ask; // Ордер Sell
Text="Sell "; // Текст для Sell
}
Alert("Попытка закрыть ",Text," ",Ticket,". Ожидание ответа..");
bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Закрытие ордера//--------------------------------------------------------- 8 --if (Ans==true) // Получилось :)
{
Alert ("Закрыт ордер ",Text," ",Ticket);
break; // Выход из цикла закр
}
//--------------------------------------------------------- 9 --int Error=GetLastError(); // Не получилось :(switch(Error) // Преодолимые ошибки
{
case135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеcontinue; // На след. итерациюcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеcontinue; // На след. итерациюcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеRefreshRates(); // Обновим данныеcontinue; // На след. итерацию
}
switch(Error) // Критические ошибки
{
case2 : Alert("Общая ошибка.");
break; // Выход из switchcase5 : Alert("Старая версия клиентского терминала.");
break; // Выход из switchcase64: Alert("Счет заблокирован.");
break; // Выход из switchcase133:Alert("Торговля запрещена");
break; // Выход из switchdefault: Alert("Возникла ошибка ",Error);//Другие варианты
}
break; // Выход из цикла закр
}
//-------------------------------------------------------------- 10 --Alert ("Скрипт закончил работу -----------------------------");
return; // Выход из start()
}
Se prendete il vostro numero 108, otterrete al massimo 151 alla potenza di 151 - 108^151=1.11426138071861e+307
108^152=1.20340229117609e+309 è troppo per la programmazione MCL, figuriamoci 108^4096
Che tipo di calcoli richiederebbe una tale scala?
Sto cercando di sintetizzare l'analisi del movimento dei prezzi e la gestione dell'attenzione della nlp, e il mio cervello ha il pilota automatico :)
Ho iniziato a imparare MQL4 e non riesco a capire come viene selezionato un ordine
dal tutorial:
for(int i=1; i<=OrdersTotal(); i++) // Il ciclo degli ordini
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Se
{
se (OrderSymbol()!= Symb) continua;
La mia comprensione è: Per i=1 finché i<= Numero di ordini
Se l'ordine selezionato nella posizione i-1 (cioè l'ordine #0) esiste
Abbinalo al simbolo
Poi aggiungere 1(i++) a i e iniziare una nuova iterazione
Non capisco il commento // Se c'è un prossimo ordine (cosa intendete: prossimo per posizione o questo ordine che è attualmente selezionato?)
Si prega di spiegare in russo.
Se c'è un ordine, cioè esiste sotto il numero e-1, allora passa alla condizione successiva.
Troverà sempre un ordine con il numero zero (che è i-1). Che metodo assurdo per determinare il "prossimo" ordine, veramente fuorviante...
Troverà sempre un ordine con numero zero (che è i-1). Questo è un metodo selvaggio per determinare l'ordine "successivo", che è veramente fuorviante...
Se non ci sono ordini allora con questo disegno:
non passerà alla condizione successiva.
perché non c'è ordine e-1 (nel nostro caso =0)
Naturalmente, non è conveniente scriverlo in questo modo e non è chiaro perché dovrebbe essere così,
e non, per esempio, in questo modo:
Ciao signor programmatori, ho una domanda, non riesco a imparare una parte del codice per chiudere la percentuale del saldo del conto. si chiude non la percentuale ma tutti in una volta e tutti gli ordini che sono nel mercato. ho bisogno che si chiuda un ordine specifico e la percentuale calcolata del saldo del deposito.consiglio cosa faccio male?
extern double Percent = 2.0;
extern int Slippage = 2;
double stop;
void OnStart()
{
if (Digits == 3 || Digits == 5)
{
Slippage *= 10;
}
for(int i = OrdiniTotali()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(stop==AccountBalance()/100*Percent)
stop=AccountBalance()/100*Percent;
if(stop<=AccountBalance())
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Aqua);
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua);
}//if(ostop<=AccountBalance())
}////(ostop==AccountBalance()/100*Percent)
}//// (OrderSymbol() == Symbol() )
}// (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
}//// for(int i = OrdersTotal()-1; i>=0; i--)
return;
}////void OnStart()
//+-----------------------------------------------------------------
com'è?
e questo:
non si realizzerà mai.
quindi:
funzionerà sempre con ogni ordine.
CONCLUSIONE: tutto è sbagliato.
La tua funzione ha bisogno di essere pensata, non ho una risposta rapida.
ma almeno è così per cominciare:
Se non ci sono ordini in una tale costruzione:
non passerà alla condizione successiva.
perché non c'è ordine e-1 (nel nostro caso =0)
Naturalmente, non è conveniente scriverlo in questo modo e non è chiaro perché dovrebbe essere così,
e non, per esempio, così:
Quando lo stavo leggendo, ho anche pensato perché non mettere semplicemente i=0, sembra essere più semplice e più chiaro.
Ecco l'intero codice dello script, forse c'è una buona ragione per cui l'autore ha messo i=1 invece di i=0. Solo che non ne so abbastanza e potrei semplicemente non vederlo, mentre ho bisogno di capire il meccanismo di funzionamento per non sollevare domande in seguito