A veces los scripts usan la #propiedad show_inputs, para mostrar un diálogo con parámetros, como en EA (está ahí como algo natural), pero es difícil distinguir la diferencia...
No aguantó hasta la mañana. La cosa mejoró un poco, pero no se pudo evitar la colocación del orden de la floración. ¿Cómo puedo establecer un único pedido en la condición requerida? Usted mencionó: No, eso no funcionaría. Sólo a través del análisis del historial de pedidos - ¿cómo deberíamos hacerlo o qué otra cosa es adecuada?
así
int i,orders_total=OrdersTotal();
bool order_on_last_bar=false;
if(orders_total>0) //если есть ордера
{
for(i=orders_total-1;i>=0;i--) //перебираем их все
{
OrderSelect(i,SELECT_BY_POS);
if(iBarShift(OrderOpenTime())==0) //если номер бара, соответствующего сремени открытия, равен 0
order_on_last_bar=true; //фиксируем этот факт
}
}
if(order_on_last_bar==false) // на нулевом баре нет открытых ордеров
{
//делаем то что нам нужно
}
Rellené todos los valores de la función iBarShift (la compilación causó un error antes), int i ya ha sido declarada anteriormente. Intenté eliminar esta repetición y reemplazarla con j por el bien del experimento; no funcionó - obtuve múltiples órdenes de apertura/cierre en algunas barras. A continuación se muestra el código con las condiciones de apertura, tal vez me he equivocado en algo. ¿Qué más podemos hacer?
int j,orders_total=OrdersTotal();
bool order_on_last_bar=false;
if(orders_total>0) //если есть ордера
{
for(j=orders_total-1;j>=0;j--) //перебираем их все
{
OrderSelect(j,SELECT_BY_POS);
if(iBarShift(NULL,0,OrderOpenTime())==0) //если номер бара, соответствующего времени открытия, равен 0
order_on_last_bar=true; //фиксируем этот факт
}
}
if(order_on_last_bar==false) // на нулевом баре нет открытых ордеров
{
while(true) // Цикл закрытия орд.
{
if (Total==0 && Opn_B==true) // Открытых орд. нет +
{ // критерий откр. Buy
RefreshRates(); // Обновление данныхAlert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,0,0);//Открытие Buyif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
if (Total==0 && Opn_S==true) // Открытых орд. нет +
{ // критерий откр. Sell
RefreshRates(); // Обновление данныхAlert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,0,0);//Открытие Selif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Sell ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
break; // Выход из while
}
}
Llené todos los valores de la función iBarShift (la compilación causó un error antes), int i ya ha sido declarada arriba; traté de eliminar esta repetición y reemplazarla con j para un experimento limpio; no funcionó - obtuve múltiples órdenes de apertura/cierre en algunas barras. A continuación se muestra el código con las condiciones de apertura, tal vez me he equivocado en algo. ¿Qué más podemos hacer?
1. ¿Qué es la variable Total, dónde se asigna su valor?
2. Sería mejor poner else antes del segundo if(Total==0 if(
int start()
{
int
Total, // Количество ордеров в окне
...
// Учёт ордеров
Symb=Symbol(); // Название фин.инстр.
Total=0; // Количество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symb)continue; // Не наш фин. инструмif (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. ордif (Total>1) // Не более одного орд
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return; // Выход из start()
}
Ticket=OrderTicket(); // Номер выбранн. орд.
Tip =OrderType(); // Тип выбранного орд.
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
los scripts son indistinguibles de los EAs...
A veces los scripts usan la #propiedad show_inputs, para mostrar un diálogo con parámetros, como en EA (está ahí como algo natural), pero es difícil distinguir la diferencia...
¿Puede sugerir un algoritmo... Tenemos que encontrar el tiempo de alta y baja del marco temporal alto en el marco temporal bajo.
¿Puede sugerir un algoritmo... Es necesario encontrar la hora de máximo y mínimo del marco temporal alto en el marco temporal bajo.
Recuerde o use inmediatamente i - el índice encontrado.
Y iTime(NULL,TF2,i) será la hora.
No aguantó hasta la mañana. La cosa mejoró un poco, pero no se pudo evitar la colocación del orden de la floración. ¿Cómo puedo establecer un único pedido en la condición requerida? Usted mencionó: No, eso no funcionaría. Sólo a través del análisis del historial de pedidos - ¿cómo deberíamos hacerlo o qué otra cosa es adecuada?
así
Ya hice esta pregunta antes, pero ahora la necesito de nuevo, para calcular el volumen máximo para abrir una posición. Lo escribo así:
Pero Max_lots es igual a cero todo el tiempo... No sé, ¿puede ser que alguien conozca una construcción más competente de cálculo de tal cosa?
así
Rellené todos los valores de la función iBarShift (la compilación causó un error antes), int i ya ha sido declarada anteriormente. Intenté eliminar esta repetición y reemplazarla con j por el bien del experimento; no funcionó - obtuve múltiples órdenes de apertura/cierre en algunas barras. A continuación se muestra el código con las condiciones de apertura, tal vez me he equivocado en algo. ¿Qué más podemos hacer?
Llené todos los valores de la función iBarShift (la compilación causó un error antes), int i ya ha sido declarada arriba; traté de eliminar esta repetición y reemplazarla con j para un experimento limpio; no funcionó - obtuve múltiples órdenes de apertura/cierre en algunas barras. A continuación se muestra el código con las condiciones de apertura, tal vez me he equivocado en algo. ¿Qué más podemos hacer?
1. ¿Qué es la variable Total, dónde se asigna su valor?
2. Sería mejor poner else antes del segundo if(Total==0 if(
1. ¿Qué es la variable Total y dónde se asigna su valor?
Esto se basa en el ejemplo del artículo Simple Expert: https://book.mql4.com/ru/samples/expert
alsu:
2. Antes del segundo if(Total==0 es mejor poner else if(.
No sirvió de nada. alsu, perdón por la intromisión, pero realmente quiero resolverlo (ponerle fin).
no es gran cosa.
intente confirmar /* */ trozo de código del EA simple, y sustituya Total por orders_total - una variable que declaramos nosotros mismos.