[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 291

 
Grazie a tutti, l'ho capito... prima l'ho fatto senza IndicatorBuffers(2); e non ha funzionato...
 

Ho raccolto buoni parametri solo bisogno di aggiungere che imposta un sacco di martingala (2 più quando si perde).O darmi un indizio circa l'advisor che sarà solo raddoppiare il lotto senza attendere un pareggio a 2 eseguire (se disponibile).Ecco un advisor:

//+------------------------------------------------------------------+

|| Fractals.mq4

//| TO |

//| http://www.forex-tradexperts-to.narod.ru |

//+------------------------------------------------------------------+

#proprietà copyright "TO"

#proprietà link "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 buy_Fract_3=true;

extern bool sell_Fract_3=true;

extern bool buy_Fract_11=true;

extern bool sell_Fract_11=true;

extern bool podtvergdenie=false;

extern int tofract=10;

extern double lots=0.1;

extern int ID = 5452;


stringa com;

doppia diffusione;


int init()

{

com=DoubleToStr(ID,0);

spread=MarketInfo(Symbol(),MODE_SPREAD)*Point;

ritorno(0);

}


int deinit()

{

ritorno(0);

}


datetime t1,t2=0;


bool order(double price,int type,string c,int m)

{

int i;

for(i=OrdiniTotali()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==prezzo && OrderType()==tipo)return(false);

if(i==0)return(true);

}

se(OrdiniTotali()==0)return(true);

}


int start()

{

int i,ret;

t1=Time[0];

se(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,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5);

for(i=OrdiniTotali()-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);

pausa;

}

if(i==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))

{

se(podtvergdenie)

{

ret=MessageBox("Signal at "+Symbol()+" H1 BUYSTOP "+"{Set Order?", "Signal", 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=OrdiniTotali()-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);

pausa;

}

if(i==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))

{

se(podtvergdenie)

{

ret=MessageBox("Signal on "+Symbol()+"H1 SELLSTOP "+"{Set Order?", "Signal", 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,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21);

for(i=OrdiniTotali()-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);

pausa;

}

if(i==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))

{

se(podtvergdenie)

{

ret=MessageBox("Signal on "+Symbol()+"H4 BUYSTOP "+"{Set Order?", "Signal", 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=OrdiniTotali()-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);

pausa;

}

if(i==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))

{

se(podtvergdenie)

{

ret=MessageBox("Signal on "+Symbol()+"H4 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)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,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=Tempo[0];

}

ritorno(0);

}

Non sono bravo a scrivere in russo, scusate!

 
AppaRat:

Non sono bravo a scrivere in russo, mi dispiace!

Non sai nemmeno come inserire il codice, non voglio leggere questo.
 

Ditemi chi può aiutarmi con il blocco Klimov, il problema è che non restituisce il valore dell'ultimo chiuso, ma il valore dell'ultimo chiuso dalla condizione

quindi a 2 condizioni

bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
и
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);

restituisce entrambi i valori True,

come far tornare solo l'ultimo ordine chiuso e non l'ultimo da un condizionale,

Ecco il codice che ho aggiunto controllo per lotti per mia comodità

//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 
FoxUA:

Ditemi chi può aiutarmi con il blocco Klimov, il problema è che non restituisce il valore dell'ultimo chiuso, ma il valore dell'ultimo chiuso dalla condizione

quindi a 2 condizioni

restituisce entrambi i valori True,

come far tornare solo l'ultimo ordine chiuso e non l'ultimo da un condizionale,

Ho aggiunto un controllo del lotto al codice per mia comodità


Avete aggiunto il controllo dei lotti a questa funzione? Ora controllano le ultime posizioni chiuse con il lotto passato, e il lotto è probabilmente sempre uguale a zero, o un intero. La variabile ll deve essere di tipo double. Perché abbiamo bisogno di controllare il lotto qui?

Tu scrivi quello che vuoi ottenere e loro te lo diranno :)

 

Sì, e perché il lotto è un int? Il lotto è sempre stato doppio.

Potresti fare così, quando ti rimane un ordine, determinare quale ordine è rimasto e cercare quello opposto.

 
FoxUA:

Dimmi chi può aiutarti con il blocco Klimov...

Non duplicare i post in thread diversi, è una cattiva forma.
 
artmedia70:

Controlla i lotti nella funzione aggiunta da te? Ora controllano le ultime posizioni chiuse con il lotto passato, e il lotto è probabilmente sempre uguale a zero, o un intero. La variabile ll deve essere di tipo double. E perché abbiamo bisogno di controllare il lotto qui?

Tu scrivi quello che vuoi ottenere e loro te lo diranno :)

Ho già ottenuto tutto, ma c'è un bug, ad un certo momento appare un ordine che non mi serve,

Ho provato a cambiarlo in int, originariamente era double, ma poi l'ho cercato e ho dimenticato di restituirlo, e se uso una funzione separata senza controllo del lotto, il risultato non cambia, quindi forse non l'ho controllato correttamente, aiutatemi a capire cosa c'è di sbagliato in questo bug

Ecco come appare la richiesta

вот так работает без проблем 
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



 
Roger:

Sì, e perché il lotto è un int? Il lotto è sempre stato doppio.

Potresti fare così, quando ti rimane un ordine, determinare quale ordine è rimasto e cercare quello opposto.


non è così semplice perché le condizioni di apertura possono essere 2 sulla vendita, e allora questa ricerca non troverà nulla
 
granit77:
Non duplicare i post in thread diversi, è una cattiva forma.

Mi dispiace, cercherò meglio di ricordarmi di cancellare i post identici da thread diversi,
Motivazione: