[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 46 1...394041424344454647484950515253...652 Nuevo comentario ilunga 2011.08.04 08:26 #451 rustein: ¿dónde está la pregunta exactamente? Warstein 2011.08.04 08:27 #452 ilunga: ¿dónde está la pregunta exactamente? https://www.mql5.com/ru/forum/115354/page78 ilunga 2011.08.04 08:31 #453 rustein: h ttps://www.mql5.com/ru/forum/115354/page78en el código que has dado, si sólo hay 1 pedido, el bucle for(;Cnt>=0;Cnt--) { RefreshRates(); OrderSelect(Cnt,SELECT_BY_POS); if(OrderMagicNumber()==Magic) { TotalOpenOrders++; } } La primera vez se intentará seleccionar un pedido que no existe Warstein 2011.08.04 08:35 #454 ilunga: en el código anterior, si sólo hay un pedido, el bucle La primera vez se intentará seleccionar un pedido que no existe Gracias, lo corregiré por mí mismo. --- 2011.08.04 08:37 #455 artmedia70: El terminal se puso a pensar profundamente, después de unos 15 minutos lo maté nada... Lo habría matado sin esperar un minuto. Дмитрий 2011.08.04 08:44 #456 PapaYozh: Inmediatamente antes de utilizar Ask y Bid, ejecute RefreshRates() Probado, nada cambia Función de envío de pedidos, todo parece ser estándar int OpenPosition(string AdvisorName,int Position,int Magic,double Lots,double StopLoss){ int N; int Сount = 5; int Slippage = (CalculateSpread() * 2); string PeriodString = GetPeriod(Period()); if(Position == OP_BUY){double Price = NormalizeDouble(Ask,Digits); string OrderName = " - Покупка по рынку"; string ErrorName = "Ошибка открытия ордера на покупку"; string CriticalErrorName = "Невозможно открыть ордер на покупку"; string MailCriticalErrorName = "Ошибка открытия"; color Arrow = Gold;} if(Position == OP_SELL){Price = NormalizeDouble(Bid,Digits); OrderName = " - Продажа по рынку"; ErrorName = "Ошибка открытия ордера на продажу"; CriticalErrorName = "Невозможно открыть ордер на продажу"; MailCriticalErrorName = "Ошибка открытия"; Arrow = YellowGreen;} while(IsTradeContextBusy() || !IsTradeAllowed()){int Interval = MathRand()+1000; Print("Торговый поток занят. Повторная проверка через "+DoubleToStr((Interval/1000),0)+" сек"); Sleep(Interval);} RefreshRates(); while(N < Сount){RefreshRates(); int Ticket = OrderSend(Symbol(),Position,Lots,Price,Slippage,StopLoss,0,AdvisorName+ OrderName,Magic,0,Arrow); if(Ticket > 0){if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)){int Flag = 1; PlaySound("recharge.wav"); break;}} else{Flag = 0; int PRM = GetLastError(); string ERR = Error(PRM,"OrderSend()"); ErrorProcessing(AdvisorName+" "+PeriodString,ErrorName+" "+PRM+" ("+ Error(PRM,"OrderSend()")+")","","OrderSend()"); N++; Sleep(5000);} if(N == Сount){ErrorProcessing(AdvisorName+" "+PeriodString,CriticalErrorName, MailCriticalErrorName+" "+PRM+" ("+Error(PRM,"OrderSend()")+")","OrderSend()");}} return(Flag);} PapaYozh 2011.08.04 09:06 #457 Dimoncheg: Lo he intentado, pero nada cambia. Función de envío de pedidos, todo parece ser estándar Primero se actualizan los precios con la función RefreshRates() y se almacena el precio requerido en Price. Luego se realiza Sleep(Interval) y en este momento las cotizaciones cambian. Después se llama a OrderSend() con la cotización del año anterior. ¿Qué espera como respuesta? [¡Archivo!] Cualquier pregunta de Discusión sobre el artículo De la teoría a Дмитрий 2011.08.04 10:53 #458 PapaYozh: Primero se refrescan los precios con la función RefreshRates() y se almacena el requerido en Price. Luego se realiza Sleep(Interval), y en ese momento las cotizaciones cambian. Y después llamas a OrderSend() con la cotización del año anterior. ¿Qué espera como respuesta? Culpa mía, he modernizado un poco en el lugar equivocado, ahora he movido el precio fuera de la función OpenPosition("Sovetneg",OP_BUY,NormalizeDouble(Ask,Digits),Magic,SlowlyIncreasingLots(0.2),MultiStop(OP_BUY,StopLoss)); La función en sí es ahora int OpenPosition(string AdvisorName,int Position,double Price,int Magic,double Lots,double StopLoss){ int N; int Сount = 5; int Slippage = (CalculateSpread() * 2); string PeriodString = GetPeriod(Period()); if(Position == OP_BUY){ string OrderName = " - Покупка по рынку"; string ErrorName = "Ошибка открытия ордера на покупку"; string CriticalErrorName = "Невозможно открыть ордер на покупку"; string MailCriticalErrorName = "Ошибка открытия"; color Arrow = Gold;} if(Position == OP_SELL){ OrderName = " - Продажа по рынку"; ErrorName = "Ошибка открытия ордера на продажу"; CriticalErrorName = "Невозможно открыть ордер на продажу"; MailCriticalErrorName = "Ошибка открытия"; Arrow = YellowGreen;} while(IsTradeContextBusy() || !IsTradeAllowed()){int Interval = MathRand()+1000; Print("Торговый поток занят. Повторная проверка через "+DoubleToStr((Interval/1000),0)+" сек"); Sleep(Interval);} while(N < Сount){RefreshRates(); int Ticket = OrderSend(Symbol(),Position,Lots,Price,Slippage,StopLoss,0,AdvisorName+ OrderName,Magic,0,Arrow); if(Ticket > 0){if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)){int Flag = 1; PlaySound("recharge.wav"); break;}} else{Flag = 0; int PRM = GetLastError(); string ERR = Error(PRM,"OrderSend()"); ErrorProcessing(AdvisorName+" "+PeriodString,ErrorName+" "+PRM+" ("+ Error(PRM,"OrderSend()")+")","","OrderSend()"); N++; Sleep(5000);} if(N == Сount){ErrorProcessing(AdvisorName+" "+PeriodString,CriticalErrorName, MailCriticalErrorName+" "+PRM+" ("+Error(PRM,"OrderSend()")+")","OrderSend()");}} return(Flag);} ¿Se ve bien ahora? Delf 2011.08.04 11:03 #459 Hola. ¿Puede decirme qué significa el tipo==4? y tipo==5 en el siguiente fragmento: double ma=iMA(Symbol(),PERIOD_D1,21,0,MODE_SMA,PRICE_CLOSE,0); for(int k=1; k<=Total de pedidos(); k++) bool select=OrderSelect(k-1,SELECT_BY_POS); if(select) { int type=OrderType(); int ticket=OrderTicket(); if (Bid<ma && type==4) OrderDelete(ticket); if (Bid>ma && type==5) OrderDelete(ticket); } Entiendo que las condiciones para borrar los pedidos, por ma es claro, pero juntos como ? Gracias. [ARCHIVE] Any rookie question, Cualquier pregunta de los Cualquier pregunta de novato, PapaYozh 2011.08.04 11:11 #460 Dimoncheg: ¿No te parece que ya está bien? No, no lo es. Se puso aún peor :) Entienda que RefreshRates() actualiza los valores de las variables predefinidas Ask y Bid, usted está usando el valor una vez almacenado en la variable Price. [ARCHIVO]Cualquier pregunta de novato, Cualquier pregunta de los Preguntas de los principiantes 1...394041424344454647484950515253...652 Nuevo comentario
¿dónde está la pregunta exactamente?
h ttps://www.mql5.com/ru/forum/115354/page78
en el código que has dado, si sólo hay 1 pedido, el bucle
La primera vez se intentará seleccionar un pedido que no existe
en el código anterior, si sólo hay un pedido, el bucle
La primera vez se intentará seleccionar un pedido que no existe
El terminal se puso a pensar profundamente, después de unos 15 minutos lo maté
Lo habría matado sin esperar un minuto.
Inmediatamente antes de utilizar Ask y Bid, ejecute RefreshRates()
Probado, nada cambia
Función de envío de pedidos, todo parece ser estándar
Lo he intentado, pero nada cambia.
Función de envío de pedidos, todo parece ser estándar
Primero se actualizan los precios con la función RefreshRates() y se almacena el precio requerido en Price.
Luego se realiza Sleep(Interval) y en este momento las cotizaciones cambian.
Después se llama a OrderSend() con la cotización del año anterior.
¿Qué espera como respuesta?
Primero se refrescan los precios con la función RefreshRates() y se almacena el requerido en Price.
Luego se realiza Sleep(Interval), y en ese momento las cotizaciones cambian.
Y después llamas a OrderSend() con la cotización del año anterior.
¿Qué espera como respuesta?
La función en sí es ahora ¿Se ve bien ahora?Culpa mía, he modernizado un poco en el lugar equivocado, ahora he movido el precio fuera de la función
Hola.
¿Puede decirme qué significa el tipo==4?
y tipo==5
en el siguiente fragmento:
double ma=iMA(Symbol(),PERIOD_D1,21,0,MODE_SMA,PRICE_CLOSE,0);
for(int k=1; k<=Total de pedidos(); k++)
bool select=OrderSelect(k-1,SELECT_BY_POS);
if(select)
{
int type=OrderType();
int ticket=OrderTicket();
if (Bid<ma && type==4)
OrderDelete(ticket);
if (Bid>ma && type==5)
OrderDelete(ticket);
}
Entiendo que las condiciones para borrar los pedidos, por ma es claro, pero juntos como ?
Gracias.
¿No te parece que ya está bien?
No, no lo es. Se puso aún peor :)
Entienda que RefreshRates() actualiza los valores de las variables predefinidas Ask y Bid, usted está usando el valor una vez almacenado en la variable Price.