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.
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?