Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 234

 
Integer:


Bueno, aquí vamos, todos a la vez... Moderadores, sería mejor mantener el orden donde hay que vigilarlo. Se está produciendo una locura en el foro, ¿y dónde están los moderadores? Si te quedas atascado, rómpelo, envíalo, hay moderadores. ¿Quizás sea el momento de dejarse de tonterías?

Me duele ver a los gigantes del foro pelearse por nada. Este es un foro para programadores de un recurso muy poderoso. Sé educado. Sugerencia:

1. Si se intenta cambiar a personalidades, aunque sea de forma subrepticia, se banea durante 24 horas;

2. insultar a una persona - una semana de prohibición;

3. Insultos reiterados con insultos - un mes de prohibición;

4.Ignorar todas las advertencias anteriores y repetir las infracciones de manera severa - prohibición permanente.

 
yosuf:

Es doloroso ver a los gigantes del foro pelearse por nimiedades. Este es un foro de programadores de un poderoso recurso. Sé educado. Sugerencia:

1. Si se intenta cambiar a personalidades, aunque sea de forma subrepticia, se banea durante 24 horas;

2. insultar a una persona - una semana de prohibición;

3. insultos reiterados con palabrotas - un mes de prohibición;

4.Ignorar todas las advertencias anteriores y repetir las infracciones de forma severa: prohibición perpetua.



Estoy totalmente de acuerdo, salvo que, por desgracia, los moderadores de aquí no son lo suficientemente competentes para detectar "algo disfrazado". Lo mismo ocurre con todos los diplomáticos sofisticados de aquí.
 

Perdonad por el offtop, pero quizás alguien pueda decirme de qué se trata:

Del manual:

" Es posible pasar parámetros por referencia. En este caso, la modificación de dichos parámetros afectará a las variables correspondientes en la función llamada pasada por referencia. Los elementos de las matrices no se pueden pasar por referencia. Los parámetros pueden ser pasados por referencia sólo dentro de los límites de un único módulo, tal oportunidad no se proporciona para las funciones de la biblioteca. Para especificar que el parámetro se pasa por referencia, se debe colocar el modificador & después del tipo de datos.

Los arrays también se pueden pasar por referencia, todos los cambios se reflejarán en el array inicial. A diferencia de los parámetros simples, las matrices también pueden pasarse por referencia en las funciones de la biblioteca".

Para pasar un valor por referencia desde una función de biblioteca, tengo que utilizar un proxy en forma de array de dimensión unitaria,

¿hay alguna otra solución?

¿Y por qué se hace así?

 
ALXIMIKS:

Perdonad por el offtop, pero quizás alguien pueda decirme de qué se trata:

Del manual:

" Es posible pasar parámetros por referencia. En este caso, la modificación de dichos parámetros afectará a las variables correspondientes en la función llamada pasada por referencia. Los elementos de las matrices no se pueden pasar por referencia. Los parámetros pueden ser pasados por referencia sólo dentro de los límites de un único módulo, tal oportunidad no se proporciona para las funciones de la biblioteca. Para especificar que el parámetro se pasa por referencia, se debe colocar el modificador & después del tipo de datos.

Los arrays también se pueden pasar por referencia, todos los cambios se reflejarán en el array inicial. A diferencia de los parámetros simples, las matrices también pueden pasarse por referencia en las funciones de la biblioteca".

1. Para pasar un valor por referencia desde una función de biblioteca, tengo que utilizar un proxy en forma de array de dimensión unitaria,

¿hay alguna otra solución?

2. ¿por qué se hace de esa manera?

1. Sí. No hay otra manera en MQL4.

2. ¿Qué es exactamente? Si hablamos de pasar por referencia, entonces es para pasar grandes volúmenes de datos (mayores que la longitud del tipo base). No cargar la pila con ellos. Normalmente, las estructuras, clases y arrays se pasan por el puntero o la referencia. Aunque la clase y la estructura pueden ser devueltas desde la función a través de return. También puede devolver una referencia o puntero a una clase, estructura o matriz.

 

Tengo este problema:

Cuando cambio el stoploss, de vez en cuando falla al colocar un stop en la última orden abierta. Ocurre muy raramente, pero se dispara de vez en cuando.

No tengo ningún error en los precios. Sólo una basura a veces no pone una orden en la última posición, después de lo cual la orden se vuelve a calcular.

¿Puede decirme dónde lo hice mal?

//+-------------------------------------------------------------------------------------+
//|                        Управление StopLoss, TakeProfit                              |
//+-------------------------------------------------------------------------------------+
bool ProfitManagement()
{
double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
double StopLossSell = SellAP-Profit*Point;
double TakeProfitSell = SellAP - Profit*Point;
RefreshRates();
for(int good = 0; good < OrdersTotal(); good ++)     // Выбираем со всего массива ордеров
 {
 if(OrderSelect (good, SELECT_BY_POS, MODE_TRADES))             
 if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
 if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  //Выбираем ордера эксперта
   { 
//-------------------------Order Buy-----------------------------------------------------  
if (BuyCount >1)                                           //Если открыты длинные позиции
 {
 if (BuyAP < Bid)                                                //Если  мы идем по рынку  
 if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)           // Профит не равен нужному
 if (Bid - StopLossBuy > DedZone)                    // Уровень достаточно удален от цены
 if (WaitForTradeContext())                                // Свободен ли торговый поток?
 if (OrderType() == OP_BUY)                                        // Выбираем ордера Buy
 if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime))    // Изменяем StopLoss
  {
 Alert (Symbol()," Хрень со стопами! ",   GetLastError());
 return(false);
  }

// ну и далее по логике
 
yosuf:

Es doloroso ver a los gigantes del foro pelearse por nimiedades. Este es un foro de programadores del recurso más potente. Sé educado. Sugerencia:

1. Si se intenta cambiar a personalidades, aunque sea de forma subrepticia, se banea durante 24 horas;

2. insultar a una persona - una semana de prohibición;

3. insultos reiterados con palabrotas - un mes de prohibición;

4.Ignorar todas las advertencias anteriores y repetir las infracciones de forma severa: prohibición perpetua.


¿Y el pelotón de fusilamiento cuándo? ¿No lo habrá?
 
Limita:

Tengo este problema:

Cuando cambio el stoploss, de vez en cuando falla al colocar un stop en la última orden abierta. Ocurre muy raramente, pero se dispara de vez en cuando.

No tengo ningún error en los precios. Sólo una basura a veces no pone una orden en la última posición, después de lo cual la orden se vuelve a calcular.

Por favor, aconséjeme dónde lo he hecho mal.

Explica esta secuencia con palabras:

   //-------------------------Order Buy-----------------------------------------------------  
         if (BuyCount >1) {
            if (BuyAP < Bid)                                      //Если  мы идем по рынку, то выполнится следующая  
            if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)   // Профит не равен нужному
            if (Bid - StopLossBuy > DedZone)                      // Уровень достаточно удален от цены
            if (WaitForTradeContext())                            // Свободен ли торговый поток?
            if (OrderType() == OP_BUY)                            // Выбираем ордера Buy
            if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
               Alert (Symbol()," Хрень со стопами! ",   GetLastError());
               return(false);
            }

En términos simples, ¿cómo le dirías a un compañero que está lejos de programar

 

Queremos ganar, por ejemplo, 50 pips por posición. El StopLoss es igual a nuestro precio medio + 50 pips .

Si tenemos una posición larga abierta, ganamos una determinada cantidad de dinero con ella. Fijamos el StopLoss en un nivel determinado. Dejemos que el mercado siga creciendo. Si todavía no ganamos suficiente dinero, esperamos hasta que empecemos a ganar lo suficiente.

Abrimos otra posición en la dirección de compra. Si el precio medio cambia, cambiamos el StopLoss.

Y por supuesto que fijamos los stops, seguimos las reglas de un broker (flujo de operaciones, nivel de stop), de lo contrario el broker no nos entenderá :)))

Espero haber conseguido explicarme :))

 
Limita:

Queremos ganar, por ejemplo, 50 pips por posición. El StopLoss es igual a nuestro precio medio + 50 pips .

Si tenemos una posición larga abierta, ganamos una determinada cantidad de dinero con ella. Fijamos el StopLoss en un nivel determinado. Dejemos que el mercado siga creciendo. Si todavía no ganamos suficiente dinero, esperamos hasta que empecemos a ganar lo suficiente.

Abrimos otra posición en la dirección de compra. Si el precio medio cambia, cambiamos el StopLoss.

Y por supuesto que fijamos los stops, seguimos las reglas de un broker (flujo de operaciones, nivel de stop), de lo contrario el broker no nos entenderá :)))

Espero haber conseguido explicarme :))

Sí... Quise decir - la lógica de esas líneas ...

Tienes una lógica ambigua ahí, ya que no hay corchetes. Lo que significa que no todas las líneas se cumplirán si se cumple la condición anterior

 
Limita:

Tengo este problema:

Cuando cambio el stoploss, de vez en cuando falla al colocar un stop en la última orden abierta. Ocurre muy raramente, pero se dispara de vez en cuando.

No tengo ningún error en los precios. Sólo una basura a veces no pone una orden en la última posición, después de lo cual la orden se vuelve a calcular.

Por favor, dígame dónde lo hice mal.


for (int good = 0; good < OrdersTotal(); good ++){                                // Выбираем со всего массива ордеров
    }    

Es mejor hacerlo así (alguien escribió que tuvo problemas al modificar o borrar pedidos con tu forma de hacerlo) :

for (int good = OrdersTotal()-1; good >= 0; good --){     // Выбираем со всего массива ордеров
    }  

¿Y por qué el aceite y la mantequilla? (dejar una cosa en paz)

 if (OrderSymbol() != Symbol() || OrderMagicNumber() !=  MagicNumber) continue;
 if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber) {          //Выбираем ордера эксперта
    }
Razón de la queja: