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

 
granit77:
Mover:

qaz2005 11.10.2011 09:30
¡Buenas tardes a todos! Por favor, avise, hay un indicador personalizado, tiene dos objetos. Sus valores los puedo averiguar, pero aquí no hay manera de distinguirlos, ya sea la línea superior o la inferior. No puedo saber el número y el orden de los buffers, al instalar no hay ajustes. En Internet leer que los ajustes para el color también van como búferes, ¿cómo hacer referencia a ellos a través de la función iCustom () o tal vez cualquier otra función para trabajar este punto?

Gracias de antemano.

P.D. ¿Existe literatura sobre el lenguaje MQL4? Ya he descargado y casi terminado un tutorial de MQL4.

Los números de los búferes se cuentan a partir de "0",

iCustom(NULL, 0, "ind",150, 0,2);

donde 150 es el periodo,

0 es el buffer,

2 es un bar.

https://docs.mql4.com/ru/indicators/iCustom

Por ejemplo

#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

por lo que lo más probable es que el azul = 0 buffer

y rojo = 1

 
skyjet:
¡Alexander! ¡Gracias por compartir tu experiencia! Pero en el camino tengo una pregunta, ¿cómo se hace la enumeración de las monedas? ¿O es el nombre de la moneda en el f-i OrderSend() en lugar de Symbol()? ¿Y podría explicar cómo poner su ejemplo en el código? Gracias de nuevo por su ayuda. :)

Roman, básicamente explicado.

En cualquier lugar donde se especifique Symbol() en el Asesor Experto, ponga por ejemplo: SymbolMax[nnnn]. En OrderSend(), se ve así

tick=OrderSend(SymbolMax[nnnn],OP_BUYSTOP,L,ur,0,sl,tp,CMM,MAGIC[I],0,Red);

Lo escribí en mi Asesor Experto, y usted establece sus propios valores allí. Puede establecer la lista de monedas, por ejemplo:

string SymbolMax[4] = {"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};

Tal vez, alguien lo implementó de otra manera, pero esta es mi búsqueda de divisas - ver el código de abajo. Pongo inicio al principio de la función. Además, he hecho un retraso de 5 segundos para evitar que los mensajes salten de un lado a otro.

if(nnnn<24) nnnn+=1; else nnnn=0;
 


Tengo un problema con una modificación en bucle,

la modificación se representa como una función definida por el usuario
Lo más interesante es que la función de rastro estándar funciona con ambas funciones, sola también funciona bien, pero cuando uso una modificación de fractal con Breakeven, obtengo modificaciones interminables con fractal y Breakeven

Me basé en la modificación de https://book.mql4.com/ru/trading/ordermodify

Me da la impresión de que el criterio para modificar el Breakeven no está bien puesto, ¿cómo puedo arreglarlo para que no se congele?




//ф-я модификации ордеров безубыток

int mod_b()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double TS=Tral_Stop; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист&&((SL<TS && Tip==0)||(SL>TS && Tip==1))
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(Bid-TS*Point,Digits))
{
SL=Price+18*Point; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(Ask+TS*Point,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=Price-18*Point; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}

int mod_f()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.

//------------------------------------------------------обсчет фрактала

int f = 3; //номер бара с которого идет проверка наличия фрагтала
int DnN = 0, UpN = 0; //порядковый номер присвоен к направлению(upper, lower)
double UpFr = 0, DnFr = 0; //числовое значение фрагтала выраженное в еденице валюты присвоен к направлению(upper, lower)
while (f < Bars && (UpFr == 0 || DnFr == 0))
{
if (iFractals(Symbol(), 0, MODE_UPPER, f) != 0)
if (UpFr == 0)
{
UpFr = iFractals(Symbol(), 0, MODE_UPPER, f);//фрактальная отложка вверх(buy)
UpN = f;
}
if (iFractals(Symbol(), 0, MODE_LOWER, f) != 0)
if (DnFr == 0)
{
DnFr = iFractals(Symbol(), 0, MODE_LOWER, f);//фрактальная отложка вниз(sell)
DnN = f;
}
f++;
}
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double UD;
double TS=UD; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
if(Tip==0)
UD=DnFr;
if(Tip==1)
UD=UpFr;
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(UD,Digits))
{
SL=UD; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(UD,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=UD; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}
 

Hola Estimados usuarios del foro.

¿Cómo puedo solicitar presupuestos de otros plazos? Tengo una plantilla en D y mi indicador necesita cotizaciones LOW, HIGH, OPEN, CLOSE de marcos temporales más pequeños (M30, H1, H4 por ejemplo).

 
Slava2007:

Hola Estimados usuarios del foro.

¿Cómo puedo solicitar presupuestos de otros plazos? Tengo una plantilla en D y mi indicador necesita cotizaciones LOW, HIGH, OPEN, CLOSE de marcos temporales más pequeños (M30, H1, H4 por ejemplo).

https://docs.mql4.com/ru/series
 

Buenas noches a todos. decidme cuál es el error aquí. aquí hay un trozo de código.

¡//+------------------------------------------------------------------+
//| Función de inicio |
//+------------------------------------------------------------------+
void start()
{
//---- comprueba el historial y las operaciones
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcula las órdenes abiertas por símbolo actual
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();

if (!IfTrueThenCountBarWork) return (0);
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- ¡¡¡En esta línea hay un error!!!
CloseAfterSomeBar (CountBar, OrderTicket());
}

}

 
isaev-av:

Buenas noches a todos. por favor, aconsejen cuál es el error aquí. aquí hay un trozo de código.

//+------------------------------------------------------------------+
//| Función de inicio |
//+------------------------------------------------------------------+
void start()
{
//---- comprobar el historial y el comercio
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcular las órdenes abiertas por el símbolo actual
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();

if (!IfTrueThenCountBarWork) return (0);
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
¡¡¡if (OrderMagicNumber() == 700000) <---- EN ESTA LÍNEA ES UN ERROR!!!
CloseAfterSomeBar (CountBar, OrderTicket())
}

}

Falta el carácter ";"
 

PapaYozh:
Пропущен символ ";"

¡¡¡gracias!!! No me di cuenta al principio)))


 

¡Otra pregunta a los expertos. ¿cómo introducir correctamente la condición de apertura: Cierre[2]<Cierre[3] en un n por ciento para la venta. para la compra lo contrario por supuesto. y n puede ser optimizado? gracias de antemano!

void CheckForOpen()
{
double ma;
int res;
//---- operar sólo en los primeros momentos de la nueva barra
if(Volume[0]>1) return;
//---- obtener la media móvil
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0)
//---- condiciones de venta
if(Open[1]>ma && Close[1]<ma)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,",MAGICMA,0,Red);
return;
}
//---- condiciones de compra
if(Open[1]<ma && Close[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,",MAGICMA,0,Blue);
return;
}

 

Dígame en qué me he equivocado, por favor... o si es la propia MT4, pero mis órdenes de compra se abren sólo en la barra alta, y las de venta sólo en la barra de cierre =) Aunque ni siquiera he estipulado estas condiciones en el código del Asesor Experto =)

 extern int TP = 200; 
     extern int TS = 50; 
     extern int TF = 1; 
     extern double lots = 0.1; 
     extern int Pips = 15; 
     extern int MaxPips = 100; 


     int slip = 3; 
     int Magic = 2; 
     int cnt,ticket,total; 

 //+------------------------------------------------------------------+ 
  //| expert initialization function | 
  //+------------------------------------------------------------------+ 
  int init() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert deinitialization function | 
  //+------------------------------------------------------------------+ 
  int deinit() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert start function | 
  //+------------------------------------------------------------------+ 

 int start() 
    { 
  //---- 

 static double PriceOld = 0.0; 
 double PriceNow; 
 PriceNow = NormalizeDouble(Bid,6); 

 total = OrdersTotal(); 
 if(total < 1) 
 { 
    if((PriceNow-PriceOld)>=Pips*Point && (PriceNow-PriceOld)<MaxPips*Point) 
    { 
           ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,0,0,Magic,0,Green); 
           if(ticket>0) 
               { 
                  OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES); 
                  Print("Ордер на покупку успешно открыт по цене:" ,OrderOpenPrice()); 
               } 
               else 
               { 
                  Print("Ордер не открыт по причине:" ,GetLastError()); 
                  return(0); 
               } 
     } 

 if((PriceNow-PriceOld)<=(-Pips)*Point && (PriceNow-PriceOld)>(-MaxPips)*Point) 
     { 
           ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,0,0,Magic,0,Red); 
           if(ticket>0) 
               { 
                  OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES); 
                  Print("Ордер на покупку успешно открыт по цене:" ,OrderOpenPrice()); 
               } 
               else 
               { 
                  Print("Ордер не открыт по причине:" ,GetLastError()); 
                  return(0); 
               } 
     } 
 } 
return(0);
}
Razón de la queja: