[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 291
Ayuda por favor tener un asesor para romper a través de los fractales. Recogí buenos parámetros sólo tiene que añadir que establece una gran cantidad de martingala (2 más cuando se pierde).O dar el poder en el asesor sólo se duplicará el lote sin esperar a 2 para ejecutar (si está disponible).Aquí es un asesor:
Dime quién puede ayudar con el bloque Klimov, el problema es que no devuelve el valor del último cerrado, sino el valor del último cerrado por la condición
por lo que a 2 condiciones
bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
и
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);
devuelve ambos valores True,
cómo hacer que devuelva sólo la última orden cerrada y no la última por un condicional,
Aquí está el código que añadí comprobación por lotes para mi comodidad
//+----------------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по стопу. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1, int ll=-1) {
datetime t;
double ocp, osl;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ll<0 || OrderLots()==ll) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
osl=NormalizeDouble(OrderStopLoss(), dg);
if (ocp==osl) return(True);
}
return(False);
}
//+----------------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1, int ll=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ll<0 || OrderLots()==ll) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
Dime quién puede ayudar con el bloque Klimov, el problema es que no devuelve el valor del último cerrado, sino el valor del último cerrado por la condición
por lo que a 2 condiciones
devuelve ambos valores True,
cómo hacer que devuelva sólo la última orden cerrada y no la última por un condicional,
He añadido una comprobación de lotes al código para mi comodidad
¿Ha añadido la comprobación de los lotes a esta función? Ahora comprueban las últimas posiciones cerradas con el lote pasado, y el lote es probablemente siempre igual a cero, o un número entero. La variable ll debe ser de tipo double. De todos modos, ¿por qué necesitamos comprobar el lote aquí?
Escribe lo que quieres conseguir, y ellos te lo dirán :)
¿Comprobar los lotes en la función añadida por ti mismo? Ahora comprueban las últimas posiciones cerradas con el lote pasado, y el lote es probablemente siempre igual a cero, o un número entero. La variable ll debe ser de tipo double. De todos modos, ¿por qué necesitamos comprobar el lote aquí?
Escribe lo que quieres conseguir, y ellos te lo dirán :)
Ya lo he conseguido todo, pero hay un fallo, es que en un momento determinado me sale un pedido que no necesito,
Intenté cambiarlo a int, originalmente era double pero se me olvidó devolverlo, y si uso una función separada sin comprobación de lote, el resultado no cambia, así que tal vez no lo comprobé correctamente, ayúdenme a entender qué pasa con este error
este es el aspecto de la solicitud
вот так работает без проблем
bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
bool BuyTakeLotA=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotA);
bool SellstopLotC=isCloseLastPosByStop(NULL,OP_SELL,MagBuy,LotC);
bool SellTakeLotC=isCloseLastPosByTake(NULL,OP_SELL,MagBuy,LotC);
при добовлении вот этих запросов
bool BuystopLotB=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotB);
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);
начинает возвращять True не по одному а по двум запросам
BuyTakeLotB и BuystopLotA
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.
Ayuda por favor tener un asesor para romper a través de los fractales. Recogí buenos parámetros sólo tiene que añadir que establece una gran cantidad de martingala (2 más cuando se pierde).O dar el poder en el asesor sólo se duplicará el lote sin esperar a 2 para ejecutar (si está disponible).Aquí es un asesor:
//+------------------------------------------------------------------+
|| Fractales.mq4 |
//| TO |
//| http://www.forex-tradexperts-to.narod.ru |
//+------------------------------------------------------------------+
#property copyright "TO"
#enlace de propiedad "http://www.forex-tradexperts-to.narod.ru"
#include <WinUser32.mqh>.
extern int TP_Fract_3=300;
extern int SL_Fract_3=200;
extern int TP_Fract_11=500;
extern int SL_Fract_11=300;
extern bool comprar_Fract_3=true;
extern bool vender_Fract_3=true;
extern bool comprar_Fract_11=true;
extern bool vender_Fract_11=true;
extern bool podtvergdenie=false;
extern int tofract=10;
extern double lotes=0.1;
extern int ID = 5452;
cadena com;
doble pliego;
int init()
{
com=DoubleToStr(ID,0);
spread=MarketInfo(Symbol(),MODE_SPREAD)*Punto;
return(0);
}
int deinit()
{
return(0);
}
datetime t1,t2=0;
bool order(double price,int type,string c,int m)
{
int i;
for(i=Total de pedidos()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==price && OrderType()==type)return(false);
if(i==0)return(true);
}
if(OrdersTotal()==0)return(true);
}
int inicio()
{
int i,ret;
t1=Tiempo[0];
si(t1!=t2)
{
int fract_buy_3=iHighest(Symbol(),Period(),MODE_HIGH,5,1);
int fract_sell_3=iLowest(Symbol(),Period(),MODE_LOW,5,1);
int fract_buy_11=iHighest(Symbol(),Period(),MODE_HIGH,21,1);
int fract_sell_11=iLowest(Symbol(),Period(),MODE_LOW,21,1);
if( fract_buy_3==3 && buy_Fract_3==true)
{
if(OrdersTotal()==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,Alto[fract_buy_3]+tofract*Punto-SL_Fract_3*Punto,Alto[fract_buy_3]+tofract*Punto+spread+TP_Fract_3*Punto,5);
for(i=Total de pedidos()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==4)
{
OrderModify(OrderTicket(),High[fract_buy_3]+tofract*Point+spread, High[fract_buy_3]+tofract*Point-SL_Fract_3*Point, High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,0,Blue);
romper;
}
if(i==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))
{
si(podtvergdenie)
{
ret=MessageBox("Señal en "+Símbolo()+" H1 BUYSTOP "+"{¿Set Order?", "Señal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);
}
}
}
if( fract_sell_3==3 && sell_Fract_3==true)
{
if(OrdersTotal()==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5);
for(i=Total de pedidos()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==5)
{
OrderModify(OrderTicket(),Low[fract_sell_3]-tofract*Point,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,0,Red);
romper;
}
if(i==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))
{
si(podtvergdenie)
{
ret=MessageBox("Señal en "+Símbolo()+"H1 SELLSTOP "+"{¿Set Order?", "Señal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,5);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point*Point,com,5);
}
}
}
if( fract_buy_11==11 && buy_Fract_11==true)
{
if(OrdersTotal()==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))orderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,Alto[fract_buy_11]+tofract*Punto-SL_Fract_11*Punto,Alto[fract_buy_11]+tofract*Punto+spread+TP_Fract_11*Punto,21);
for(i=Total de pedidos()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==4)
{
OrderModify(OrderTicket(),High[fract_buy_11]+tofract*Point+spread, High[fract_buy_11]+tofract*Point-SL_Fract_11*Point, High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,0,Blue);
romper;
}
if(i==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))
{
si(podtvergdenie)
{
ret=MessageBox("Señal en "+Símbolo()+"H4 BUYSTOP "+"{¿Set Order?", "Señal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);
}
}
}
if( fract_sell_11==11 && sell_Fract_11==true)
{
if(OrdersTotal()==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))orderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21);
for(i=Total de pedidos()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==5)
{
OrderModify(OrderTicket(),Low[fract_sell_11]-tofract*Point,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,0,Red);
romper;
}
if(i==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))
{
si(podtvergdenie)
{
ret=MessageBox("Señal en "+Símbolo()+"H4 BUYSTOP "+"{¿Set Order?", "Señal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lotes,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,21);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point*Point,com,21);
}
}
}
t2=Tiempo[0];
}
return(0);
}
Soy malo escribiendo en ruso, ¡lo siento!
No se me da bien escribir en ruso, ¡lo siento!
Dime quién puede ayudar con el bloque Klimov, el problema es que no devuelve el valor del último cerrado, sino el valor del último cerrado por la condición
por lo que a 2 condiciones
devuelve ambos valores True,
cómo hacer que devuelva sólo la última orden cerrada y no la última por un condicional,
Aquí está el código que añadí comprobación por lotes para mi comodidad
Dime quién puede ayudar con el bloque Klimov, el problema es que no devuelve el valor del último cerrado, sino el valor del último cerrado por la condición
por lo que a 2 condiciones
devuelve ambos valores True,
cómo hacer que devuelva sólo la última orden cerrada y no la última por un condicional,
He añadido una comprobación de lotes al código para mi comodidad
¿Ha añadido la comprobación de los lotes a esta función? Ahora comprueban las últimas posiciones cerradas con el lote pasado, y el lote es probablemente siempre igual a cero, o un número entero. La variable ll debe ser de tipo double. De todos modos, ¿por qué necesitamos comprobar el lote aquí?
Escribe lo que quieres conseguir, y ellos te lo dirán :)
Sí, ¿y por qué el lote es una int? El lote siempre ha sido doble.
Podrías hacer esto, cuando te quede un pedido, determinar qué pedido queda y buscar el contrario.
Dime quién puede ayudar con el bloque Klimov...
¿Comprobar los lotes en la función añadida por ti mismo? Ahora comprueban las últimas posiciones cerradas con el lote pasado, y el lote es probablemente siempre igual a cero, o un número entero. La variable ll debe ser de tipo double. De todos modos, ¿por qué necesitamos comprobar el lote aquí?
Escribe lo que quieres conseguir, y ellos te lo dirán :)
Ya lo he conseguido todo, pero hay un fallo, es que en un momento determinado me sale un pedido que no necesito,
Intenté cambiarlo a int, originalmente era double pero se me olvidó devolverlo, y si uso una función separada sin comprobación de lote, el resultado no cambia, así que tal vez no lo comprobé correctamente, ayúdenme a entender qué pasa con este error
este es el aspecto de la solicitud
Sí, ¿y por qué el lote es una int? El lote siempre ha sido doble.
Podrías hacer esto, cuando te quede un pedido, determinar qué pedido queda y buscar el contrario.
no es tan sencillo porque las condiciones de apertura pueden ser 2 en la venta, y entonces esta búsqueda no encontrará nada
No duplique los mensajes en diferentes hilos, es una mala forma.
Lo siento, me esforzaré más en recordar borrar los mismos mensajes de diferentes hilos,