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

 

a Armen

Esto significa que las funciones no se han utilizado en la EA. Escriba algo como

if (CountBuys()>2 && CountSells()>2) {\\действия}

 
¿Pueden decirme si es posible retirar los fondos sobrantes, por ejemplo a una caja de seguridad, si superan el depósito original mientras el EA está funcionando y dejarlos dentro del depósito original, sin cerrar ninguna posición abierta?
 
link1:


Vinin, muchas gracias por tu respuesta. Pero sinceramente no entiendo por qué ask1,ask2,ask3 tienen asignados los valores 1,-1,-1. ¿Qué significan? Si no te importa, podrías describir con palabras qué y cómo sucede, soy un novato, aún no entiendo del todo. Le estaré muy agradecido).


Se les asignan valores que nunca serán iguales al precio.

 
yosuf:
¿Puedo retirar los fondos sobrantes, por ejemplo a la caja de seguridad, si superan el depósito inicial durante la operación del EA y dejarlos dentro del depósito inicial sin cerrar las posiciones abiertas?

En MT5 se puede ver. Uso de TesterWithdrawal() para simular la retirada de beneficios

Esto no es posible en MT4

 

¡Hola!

¡Estoy escribiendo un indicador que cuenta el número de puntos que el precio se movió hacia arriba y hacia abajo durante una garrapata.
¿Qué hay de malo en el código y dónde está el error, por favor aconsejar!

#property indicator_chart_window

extern int LimitBar = 10;
extern int cegl = 6;
extern string Shrift = "Arial Black";
extern bool delete = true;



double old_price, max_price, sum_pip_sell, sum_pip_bay, new_pip_bay, new_pip_sell, old_pip_bay, old_pip_sell;
datetime ctat_SB =0;

int init() {return(0);}

int deinit() {
if (delete == true) {
GetDellName(); 
}
ObjectsDeleteAll(0, OBJ_TREND);
return(0);
}

int start() {
double price;
string name_4,name_b;
int i=0;
int limit, pip; 
double delta; 
int counted_bars=IndicatorCounted(); 
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if(ctat_SB==0) ctat_SB=Time[0];

if(limit>0) limit=0;

for(i=limit; i>=0; i--) {
if(old_price==0) old_price=Close[i];

if(iBarShift(NULL,0,ctat_SB)-iBarShift(NULL,0,Time[i])>=LimitBar) { ' счетчик баров для LimitBar

sum_pip_sell =0;
sum_pip_bay = 0; 
new_pip_bay = 0;
new_pip_sell = 0;
old_pip_bay = 0;
old_pip_sell = 0;

} 

price = Close[i];
if(price > max_price) max_price=price; 

delta = price - old_price; ' разница пунктов
pip = delta*10000; ' округляем до целого

//---- Каунт плюс 

if(delta>=0) { ' условие для ап пунктов

new_pip_bay = pip;
sum_pip_bay = old_pip_bay+new_pip_bay;
old_pip_bay = sum_pip_bay; 

}
//---- Каунт минус
if(delta<0) { ' условие для даун пунктов

new_pip_sell = MathAbs(pip);
sum_pip_sell = old_pip_sell+new_pip_sell;
old_pip_sell = sum_pip_sell;

} 
//----
old_price=price;

//---- размещаем счетчик на графике
name_4 = "TPM_ 4 "+TimeToStr(ctat_SB);
SetText(name_4+"sell",DoubleToStr(sum_pip_sell,0), ctat_SB+60*Period()*2, max_price+(Ask-Bid)*6, Blue,12); 
SetText(name_4+"bay",DoubleToStr(sum_pip_bay,0),ct at_SB-60*Period()*2, max_price+(Ask-Bid)*4.5, Red,12); 

} 

return(0);
}
void SetText(string name,string text,datetime t1, double p1, color c, int size) // --- отображение текста
{
if (ObjectFind(name)!=-1) ObjectDelete(name);
ObjectCreate(name,OBJ_TEXT,0,0,0,0,0); 
ObjectSet(name, OBJPROP_TIME1 , t1);
ObjectSet(name, OBJPROP_PRICE1, p1); 
ObjectSetText(name,text,cegl,Shrift,c);
}

//+------------------------------------------------------------+
void GetDellName (string name_n = "TPM_ ") // -- удаление меток с графика
{
string vName;
for(int i=ObjectsTotal()-1; i>=0;i--)
{
vName = ObjectName(i);
if (StringFind(vName,name_n) !=-1) ObjectDelete(vName);
} 
} 
//----

Gracias de antemano.


 
yosuf:
Por favor, dígame si es posible retirar los fondos excesivos, por ejemplo, a la caja de seguridad, si superan el depósito inicial durante el trabajo del EA y dejarlos dentro del depósito inicial, sin cerrar las posiciones abiertas?

Sólo permite que el Asesor Experto opere con un depósito igual al inicial.

Recuerde el tamaño del depósito inicial y antes de cada apertura de una posición compruebe su lote. Si el volumen de la operación supera el valor permitido, reduzca el lote o libere los fondos.

 
Fox_RM:

¡Hola!

¡Estoy escribiendo un indicador que cuenta el número de puntos que el precio se movió hacia arriba y hacia abajo durante una garrapata.
¿Qué hay de malo en el código y dónde está el error, por favor aconsejar!

Gracias de antemano.


¿Por qué hay tantas cosas?

Recuerde el precio del tick anterior. Cuando llega un nuevo tick, cuenta la diferencia de precio dividida por el punto y recuerda ese precio de nuevo como el precio del tick anterior.

 
artmedia70:

¿Por qué son tantas cosas?

Recuerda el precio del último tick. Con la llegada de un nuevo tick, cuenta la diferencia de precio dividida por el punto y recuerda ese precio de nuevo como el precio del tick anterior.

En las condiciones para los puntos AP y DAUN el código dice exactamente eso, pero al mostrar el indicador en el gráfico de precios, el marcador da como resultado 0 para el número de puntos de subida y 0 para el de bajada. ¿Cuál es el problema que no entiendo?
 

¡Señores programadores!

¿La prioridad (y la asociatividad) de las operaciones de MQL4 se corresponden con las de C?

No quiero abusar de los paréntesis, pero la prioridad de las operaciones no se mencionaen ninguna parte de la documentación.

Esta no es una pregunta ociosa. MQL4 se posiciona como un lenguaje similar a C. La palabra clave aquí es DEFINITIVAMENTE. Si tal cosa como un cálculo completo de expresiones lógicas es sólo una desviación del estándar C, entonces la visibilidad de las variables definidas en un bloque fuera de este bloque es un grave error en los cánones de programación.

Quién sabe hasta dónde podría llegar la imaginación de los desarrolladores de MQL4 :).

 
artmedia70:

Sólo permite que el Asesor Experto opere con un depósito igual al inicial.

Recuerde el tamaño del depósito inicial y antes de cada apertura de una posición compruebe su lote. Si el volumen de una operación supera el tamaño permitido, reduzca el lote o libere los fondos.

Me refiero a algo así: cuando opero en micro-real con 10knt, ¿puedo retirar el exceso de fondos manualmente cuando quiera durante el funcionamiento del EA, o tengo que parar el EA, cerrar todas las posiciones abiertas y sólo entonces retirar el exceso de fondos? Opero con un lote fijo de 0,1. ¿Cómo puedo aplicar realmente su recomendación? "Permitir que el Asesor Experto opere sólo con el depósito igual al depósito inicial.