[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 700

 
cyclik33:


Ya te dije por qué el código no funciona bien: lo pusiste en el lugar equivocado... :) Creo que si desenroscas las ruedas y las metes en el maletero, no llegarás muy lejos, aunque las ruedas estén ahí y las puertas se cierren... :)
 
T-G:

La pregunta puede ser trivial, el Asesor Experto está operando en M1, llegó la señal para abrir una orden, supongamos que el stop es corto y la orden se cerró en la sl. pero la condición para abrir la orden sigue existiendo.

¿Cuál es la mejor manera de garantizar que la orden no se abra de nuevo en el mismo minuto?

Comprueba la apertura de una nueva vela. Si es uno nuevo, se abre, si es uno viejo, no...
 
ToLik_SRGV:

El recuento de números en OrderSelect() comienza en cero. Y tienes 1, lo que significa que estás buscando un segundo pedido, aunque sólo tienes uno en el mercado, por lo que no funciona.

Gracias, lo había olvidado.
 
ToLik_SRGV:

Boris, una pequeña corrección en el código, se me olvidó añadir el restablecimiento de la posición del array, al volver al lote original:


No estoy seguro de si lo tengo en el lugar correcto. Después de uno perdedor puede abrir el lote inicial, si este también es perdedor, puede abrir el lote inicial de nuevo.

Y a veces, después de la primera pérdida, lleva 0,4.

¿Debo haber puesto algo en el lugar equivocado?

 
cyclik33:


Tengo una forma muy extraña de trabajar con este código. Después de perder uno puede abrir el primer lote y si éste vuelve a perder, puede abrir el primer lote.
Y a veces después de la primera pérdida toma 0,4.
¿Debo haber puesto algo en el lugar equivocado?

Boris, una pequeña corrección en el código, me olvidé de añadir el restablecimiento de la posición del array, al volver al lote original:

//+------------------------------------------------------------------+
double getMartinLot(double lot, double arrayLot[]){//ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;   
   static int loop;
   if(loop == ArraySize(arrayLot))loop = 0;   
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА   
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ ДО БАЗОВОГО
      loop = 0;
   }else{
      save_Lot = arrayLot[loop];                   //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ
      loop++;
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+
 
artmedia70:
Ya te he dicho por qué no funciona bien: lo has puesto en el lugar equivocado... :) Creo que si desenroscas las ruedas y lo metes en el maletero, no llegarás muy lejos, aunque parece que las ruedas están ahí y las puertas se cierran... :)


Estoy absolutamente de acuerdo con usted. Pero no estoy criticando tu código, sólo dije que tenía un problema con él), por cierto, tengo un problema con él de nuevo, si no te importa - dime qué está mal, realmente me gustaría entender lo que estoy haciendo mal.

extern color colorOpenBuy = Azul;
extern colorCloseBuy = Aqua;
extern colorOpenSell = Rojo;
extern colorCloseSell = Aqua;


void deinit() {
Comment(");
}

double Lots_New = Lot;


//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+

int start(){
if (lFlagUseHourTrade){
if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comment("¡Aún no ha llegado la hora de comerciar!");
return(0);

Lo he pegado aquí, como me has dicho, antes de la función Start, pero al compilar dice 'Lot' - inicialización esperada D:\MetaTrader\experts\Prostoj_2.mq4 (39, 20)

Por favor, dígame qué puede ser.

 
artmedia70:
Comprueba la apertura de una nueva vela. Si es nuevo, se abre, si es viejo, no...
¿cuál es la mejor manera de hacerlo?
 
cyclik33:


Estoy absolutamente de acuerdo con usted. Pero no estoy criticando tu código, sólo digo que tengo algunos problemas con él. Por cierto, tengo otro problema con él, si no te importa: dime qué está mal, me gustaría saber qué estoy haciendo mal.

color externo colorOpenBuy = Azul;
color externo colorCloseBuy = Aqua;
extern colorOpenSell = Rojo;
color externo colorCloseSell = Aqua;


void deinit() {
Comentario(");
}

double Lotes_Nuevos = Lote;


//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

int inicio(){
si (lFlagUseHourTrade){
if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comentario("¡Aún no ha llegado la hora del comercio!");
return(0);

Lo inserté aquí, como me dijiste, antes de la función Start, pero al compilar dice 'Lot' - inicialización esperada D:\MetaTrader\experts\Prostoj_2.mq4 (39, 20)

Por favor, dígame qué puede ser.

¿Dónde se inicializa Lot en su código?

extern color colorOpenBuy = Blue;
extern color colorCloseBuy = Aqua;
extern color colorOpenSell = Red;
extern color colorCloseSell = Aqua;
extern double Lot = 0.1;
double Lots_New;

void deinit() {
Comment("");
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

int start(){
if (lFlagUseHourTrade){
if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);

A continuación, sólo después de la comprobación de los alces, cambiar Lots_New como se ha escrito antes, o asignarle el valor = Lot;

 

Sí... Estoy teniendo problemas con las matrices... Tratando de llenar un array con datos de inductores, la pequeña función es un estancamiento... ¿Puede decirme qué estoy haciendo mal?

double      TempIND[50]; 
void   SaveDataIND(double TempIND[], int nBars)
{
   ArrayResize(TempIND,nBars);
   for (int j=0; j<=nBars-1; j++)
      {
         TempIND[j]=iAD(NULL,PERIOD_M5,j);       // ЗДЕСЬ ОШИБКА array item cannot be assigned
         Print("TempIND[",j,"] = ",TempIND[j]);
      }

}

Yo lo llamo así:

SaveDataIND(TempIND, 20);
¿Dónde está el problema?
 
artmedia70:

Sí... Estoy teniendo problemas con las matrices... Tratando de llenar un array con datos de inductores, la pequeña función es un estancamiento... ¿Puede decirme qué estoy haciendo mal?

Yo lo llamo así:

¿Dónde está el problema?



tu perro al pasar los parámetros a la función, si pasas como SaveDataIND(double TempIND[])

double TempIND[ ] es de hecho un nuevo array para la función pero sin derecho a cambiar los parámetros, prueba con SaveDataIND(double & TempIND[])