Forexman77: Lo necesitas, por supuesto. Pues bien, ¿cómo aplicar esta construcción a la búsqueda del mínimo? No puedo hacerlo con mi cerebro)
Para encontrar el máximo, se asigna a la variable val el valor 0 (obviamente menor que cualquiera de los valores de los indicadores).
Esto significa que para encontrar el mínimo, debemos añadir un valor deliberadamente más alto. Se puede utilizar la constante EMPTY_VALUE o el valor del indicador directamente en alguna barra entre las que se busca el mínimo.
¡Claro que sí! Bien, ¿cómo se aplica esta construcción para encontrar el mínimo? No puedo entenderlo). Y quiero aprender a declarar un array. Lo intenté de esta manera:
Sale -1.
El bucle pasa por 34 valores y el array sólo contiene 33 celdas, correcto.
Y prueba con ArrayMinimum(num_array,WHOLE_ARRAY,0);
Para encontrar el máximo, se asigna a la variable val el valor 0 (obviamente menor que cualquiera de los valores de los indicadores).
Esto significa que para encontrar el mínimo, debemos añadir un valor deliberadamente más alto. Se puede utilizar la constante EMPTY_VALUE o el valor del indicador directamente en alguna barra entre las que se busca el mínimo.
#property strict#include <Indicators\Trend.mqh>
bool ind;
CiMA MA;
externint pos=1;
externint sl=40;
externint tp=70;
datetime time;
datetime time2;
bool trade=false;
bool trade2=false;
int a,b;
intOnInit()
{
//---
MA.Create(Symbol(),PERIOD_CURRENT,10,6,MODE_EMA,PRICE_CLOSE);//создал машку//---return(INIT_SUCCEEDED);
}
voidOnTick()
{
//---if(IsNewBar()==true)//если новый бар включаемся
{
if(buy(pos)==true)//если цена выше МА продолжаем
{
if(!ExistPositions(Symbol(),-1,-1,0))//если нету открых ордеров продолжаем
{
if(GetTypeLastClosePos(Symbol(),-1)!=OP_BUY)//если тип последней закрытой позиции был не на покупку то тогда только покупаем таким образом я пред остерегаюсь от повторных входов в покупку если цена //все ещо выше МА...но почему то не работает открываются и дальше сделки на покупку если ордер закрылся выше МА....ХОТЯ НЕ ДОЛЖО ТАК КАК Я ОГРАНИЧИЛ ПО ТИПУ ПОЗИЦИИ ПОСЛЕДНЮЮ СДЕЛКУ И ОНИ ДОЛЖНЫ ТОЛЬКО // ЧЕРЕДОВАТСЯ И УЖ НИ КАК НЕ ПОВТОРЯТСЯ ПО НЕСКОЛЬКО РАЗ ПОДРЯД
{
trade=true;
}
if(trade==true)
{
OpenPosition(Symbol(),OP_BUY,0.1,Ask-sl*Point,Ask+tp*Point);
trade=false;
}
}
}
if(sell(pos)==true)
{
if(!ExistPositions(Symbol(),-1,-1,0))
{
if(GetTypeLastClosePos(Symbol(),-1)!=OP_SELL)
{
trade2=true;
}
if(trade2==true)
{
OpenPosition(Symbol(),OP_SELL,0.1,Bid+sl*Point,Bid-tp*Point);
trade=false;
}
}}
}
}
//возвращает истину если закрытие бара с указаной позицией выше МАbool buy(int pos)
{
if(iClose(Symbol(),0,pos)>MA.Main(1))
returntrue;
elsereturnfalse;
}
//+------------------------------------------------------------------+//| возвращает истину если закрытие бара с указаной позицией ниже МА//+------------------------------------------------------------------+bool sell(int pos)
{
if(iClose(Symbol(),0,pos)<MA.Main(1))
returntrue;
elsereturnfalse;
}
TODAS LAS FUNCIONES excepto las dos condiciones de compra y venta están tomadas de la rama de kim...... por favor dígame donde me equivoqué...necesito una transacción por intersección
/SetRectangle(clrBlue,"Прямоугольник",Time[10],Low[10],Time[0],High[0]);
//Если bk=true, то будет залит цветом, если false - то просто "рамка" ... sz при "просто рамка" - это ширина линий "рамки"////+----------------------------------------------------------------------------+void SetRectangle(color cl, string nm="", datetime t1=0, double p1=0, datetime t2=0, double p2=0, int sz=0, bool bk=true) {
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
ObjectSet(nm, OBJPROP_TIME1 ,t1);
ObjectSet(nm, OBJPROP_PRICE1 ,p1);
ObjectSet(nm, OBJPROP_TIME2 ,t2);
ObjectSet(nm, OBJPROP_PRICE2 ,p2);
ObjectSet(nm, OBJPROP_COLOR ,cl);
ObjectSet(nm, OBJPROP_WIDTH ,sz);
ObjectSet(nm, OBJPROP_BACK ,bk);
}
cómo hacer que un rectángulo se dibuje hacia adelante en lugar de hacia atrás, por ejemplo, cinco barras hacia adelante a un precio especificado...... y que no se vuelva a dibujar
Sin embargo, no hay mucha información en la pregunta. Hay muchos extremos en las barras horarias del mes. Y por cierto, ¿extremos de qué exactamente?
He asumido que sólo hay dos extremos mensuales, el mínimo y el máximo... Bueno, da igual, al principio era un código largo, por eso pedí ayuda... Pero entonces caí en la cuenta, y conseguí encajarlo en cuatro líneas.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Lo necesitas, por supuesto. Pues bien, ¿cómo aplicar esta construcción a la búsqueda del mínimo? No puedo hacerlo con mi cerebro)
Para encontrar el máximo, se asigna a la variable val el valor 0 (obviamente menor que cualquiera de los valores de los indicadores).
Esto significa que para encontrar el mínimo, debemos añadir un valor deliberadamente más alto. Se puede utilizar la constante EMPTY_VALUE o el valor del indicador directamente en alguna barra entre las que se busca el mínimo.
O así:
¡Claro que sí! Bien, ¿cómo se aplica esta construcción para encontrar el mínimo? No puedo entenderlo).
Sale -1.Y quiero aprender a declarar un array. Lo intenté de esta manera:
El bucle pasa por 34 valores y el array sólo contiene 33 celdas, correcto.
Y prueba con ArrayMinimum(num_array,WHOLE_ARRAY,0);
... También quiero aprender a declarar un array...
Si sólo es para el entrenamiento y el propósito cognitivo...
El periodo en el que se determinan los mínimos y los máximos - debe ser un parámetro externo que permita el ajuste y la optimización.
Así que, en primer lugar, el array se declara sin tamaño:
double val[];La declaración del array se hace en una sección común, no en una función.
En la función init, el tamaño se establece en el array:
Ahora en la función de inicio llenamos el array:
Por último , se aplican ArrayMaximum() y ArrayMinimum() a la matriz.
Para encontrar el máximo, se asigna a la variable val el valor 0 (obviamente menor que cualquiera de los valores de los indicadores).
Esto significa que para encontrar el mínimo, debemos añadir un valor deliberadamente más alto. Se puede utilizar la constante EMPTY_VALUE o el valor del indicador directamente en alguna barra entre las que se busca el mínimo.
O así:
El bucle pasa por 34 valores, mientras que el array sólo contiene 33 celdas, arréglalo.
Y prueba con ArrayMinimum(num_array,WHOLE_ARRAY,0);
Queridos compañeros programadores Estoy en problemas, por favor ayúdenme.
Ya me he devanado los sesos con este código.
Aquí está la función completa:
Alcanza a imprimir y esto es lo que sale:
Mientras que el ticket: 225299700 es un ticket de pedido OP_SELLLIMIT.
Y modifica el stop loss de esta orden seleccionada como se esperaba. Pero OP_BUY no se ve, aunque estoy seguro de que existe:
¿Cuál puede ser el problema? ¿Por qué me hace esto? Por favor, ayúdenme a entender.
otra pregunta sobre la función
cómo hacer que un rectángulo se dibuje hacia adelante en lugar de hacia atrás, por ejemplo, cinco barras hacia adelante a un precio especificado...... y que no se vuelva a dibujar
He echado un vistazo. Gracias.
Sin embargo, no hay mucha información en la pregunta. Hay muchos extremos en las barras horarias del mes. Y por cierto, ¿extremos de qué exactamente?