[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 22

 

Hola. Ayuda para Dummies: Tengo un EA que puede colocar órdenes pendientes en el mínimo y máximo de la vela anterior. Apertura en dirección a la vela.

La necesidad:

- Para cambiar la dirección de la apertura, es decir, pendiente de compra a - pendiente de venta.

- Hacer el mínimo y el máximo de la vela anterior en lugar del mínimo y el máximo del día anterior

- Deje todo lo demás como está, es decir, borre las órdenes, los parámetros del lote, los stop-los, el número mágico

Todas mis acciones conducen al error 130 en el probador o no compila en absoluto. Gracias por cualquier consejo.

A continuación se muestra el código de trabajo, sin mi intervención.

extern double Lot = 0.01;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int Magic = 618;

int Barras_arriba = 0;
int Barras_abajo = 0;

double StopLoss_new = 0;
double TakeProfit_new = 0;

//+------------------------------------------------------------------+
//| función de inicialización experta |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| función experta de desinicialización |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| función de inicio experto |
//+------------------------------------------------------------------+
int start()
{
//----

for( int cnt=0;cnt<OrdersTotal();cnt++)
{
if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)>0)
{
if (
(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
&& OrderMagicNumber() == Magic
&& OrderSymbol() == Symbol()
&& OrderComment() != DoubleToStr(Bars,0)
)
{
Comment("okkk");
OrderDelete(OrderTicket());
}
}
}

StopLoss_new = StopLoss;
TakeProfit_new = TakeProfit;

if (Up_bars != Bars)
{
if (High[1]-Ask >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(High[1]-StopLoss*Point,Digits);
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(High[1]+TakeProfit*Point,Digits);
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(High[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000);
RefreshRates();
}
si no
{
Barras_de_subida = Barras;
}
}
}

StopLoss_new = StopLoss;
TakeProfit_new = TakeProfit;

if (Barras_de_subida != Bares)
{
if (Oferta-Bajo[1] >= MarketInfo(Símbolo(),MODO_STOPLEVEL)*Punto)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(Bajo[1]+StopLoss*Punto,Dígitos);
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(Low[1]-TakeProfit*Point,Digits);
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Low[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000);
RefreshRates();
}
else
{
Down_bars = Bars;
}
}
}


//----
return(0);
}
//+------------------------------------------------------------------+

 
delf:

Hola. Ayuda a un tonto a resolver esto:

¿Por casualidad confundiste "cualquier pregunta de principiante" con " rehacer completamente el EA"?
 
LazarevDenis:

Capitán Obviedad... y aún así que alguien me dé una pista.

Te daré una pista: pon esa expresión en palabras. Y verás que lo has puesto mal.

PS.
Si es tan obvio para ti dónde buscar un error, ¿para qué preguntar?

 
delf:


Si el error 130. Reconsidere la parada y la retirada.
 
LazarevDenis:

ayuda por favor, la orden debe cerrar a 4 veces la distancia de alta a orderopenprice

¿En qué me he equivocado?

todas las órdenes se cierran dentro de los 3 pips de la apertura


¿Ha intentado calcular el resultado de su fórmula? Si no es así, hazlo, porque se me hace una mierda. Tal vez sea porque no conozco todas las condiciones.
 

Sólo hay un error, pero no sé cómo solucionarlo. ¿Dónde está el problema?

'Símbolo' - inicialización esperada C:\N-Archivos de Programa\N-MetaTrader Finam\N-experts\1.mq4 (8, 13)

'Símbolo - inicialización esperada C:\N-Archivos de Programa\N-MetaTrader Finam\N-experts\1.mq4 (8, 13)

extern double lot=0.1;
extern double tp=0;
extern double sl=0;
int Real_Order=-1;    // Пока рыночных нет

string Symb=Symbol;                        // Финанс. инструмент

int start()     // Спец. функция start()


{                                
   OrderSend(Symbol(),OP_BUY,0.1,Ask,0,Bid-sl*Point,Ask+tp*Point); 
   if(IsDemo()) PlaySound("alert.wav");
   
      for (int i=1; i<=OrdersTotal(); i++)       //Цикл по всем ордерам,..
     {                                        //отражённым в терминале
      if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
        {  
               //--------------------------------------------------------------                                   
         if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.
         int Tip=OrderType();                   // Тип ордера
         if (Real_Order>1) continue;                   //отложник ордер  
         //------------------------------------------------------ 4 --
         double Price=OrderOpenPrice();         // Цена ордера
         if 
            NormalizeDouble(tp,sl,Digits)       // Выбор самого близкого орд       
           {         
            Real_Order=Tip;                     // Есть рыночный ордер
            int Ticket=OrderTicket();           // Номер ордера
            double Lot=OrderLots();             // Количество лотов
           }
        }                                       //Конец анализа ордера
     }                                          //Конец перебора орд.
     //---------------------------------------------------------------------+
    while(true)                                  // Цикл закрытия орд.
     {
      if (Real_Order==-1)                       // Если рыночных нет
        {
         Alert("По ",Symb," рыночных ордеров нет");
         break;                                 // Выход из цикла закр        
        }
      //--------------------------------------------------------- 7 --
      switch(Real_Order)                        // По типу ордера
        {
         case 0: double Price_Cls=Bid;          // Ордер Buy
            string Text="Buy ";                 // Текст для Buy
            break;                              // Из switch
         case 1: 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)                             // Преодолимые ошибки
        {
         case 135:Alert("Цена изменилась. Пробуем ещё раз..");
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
         case 136:Alert("Нет цен. Ждём новый тик..");
            while(RefreshRates()==false)        // До нового тика
               Sleep(1);                        // Задержка в цикле
            continue;                           // На след. итерацию
         case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
            Sleep(500);                         // Простое решение
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
        }
      switch(Error)                             // Критические ошибки
        {
         case 2 : Alert("Общая ошибка.");
            break;                              // Выход из switch
         case 5 : Alert("Старая версия клиентского терминала.");
            break;                              // Выход из switch
         case 64: Alert("Счет заблокирован.");
            break;                              // Выход из switch
         case 133:Alert("Торговля запрещена");
            break;                              // Выход из switch
         default: Alert("Возникла ошибка ",Error);//Другие варианты   
        }
      break;                                    // Выход из цикла закр
     }  
 
   
   return;                                   // Выход из start()
  }
 

alex12, especifica algo concreto, como

string Symb="EURUSD";                        // Финанс. инструмент
 
alex12:

Sólo hay un error, pero no sé cómo solucionarlo. ¿Dónde está el problema?

'Símbolo' - inicialización esperada C:\N-Archivos de Programa\N-MetaTrader Finam\N-experts\1.mq4 (8, 13)

'Símbolo - inicialización esperada C:\N-Archivos de Programa\N-MetaTrader Finam\N-experts\1.mq4 (8, 13)

Lo has hecho:

string Symb=Symbol;                        // Финанс. инструмен

Es necesario:

string Symb=Symbol();                        // Финанс. инструмент
De hecho, puede hacer doble clic en el mensaje de error y el cursor irá a la ubicación especificada (por cierto) donde se produjo el error de compilación, es decir, aquí: (8, 13)

Después de eso, se lanzarán otros errores... :)

Mueve la línea anterior al principio de la función start()

Eso es un comienzo, luego hay que ocuparse de otros errores...

 

Hola a todos.

Chicos, necesitamos ayuda. Describiendo la situación.

el precio actual es 1.4100 (por ejemplo) necesito encontrar una barra cuya apertura esté dentro (más o menos 10 pt de 1.4100) de 1.4090 a 1.4110 - esto está bien.

Por ejemplo, el programa ha encontrado la barra con la apertura a 1,4105 que me cuadra.

Entonces el programa debe comparar esta barra con la barra a su izquierda y a la derecha y si es más baja, será adecuada.

 

Artem, el truco aquí es que hay una línea como esta abajo:

if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.

Así que la forma que has sugerido no tiene mucho sentido - si entiendo bien lo que quiere alex12.