Solo "Caratteristiche utili di KimIV". - pagina 11

 
Ho ottenuto solo queste funzioni, e ho deciso di capire la logica del programmatore. Ecco perché faccio domande. Ecco a cosa serve questo forum.
 
satop:

Funzione DistMarketAndPos().

Ci siamo! Ecco che arrivano altre funzioni interessanti! Per esempio, restituisce la distanza in pip tra il mercato e la posizione più vicina. La selezione più accurata delle posizioni da controllare è impostata da parametri esterni:

  • sy - Nome dello strumento. Se questo parametro è impostato, la funzione controllerà solo le posizioni dello strumento specificato. Il "" o NULL significa il simbolo corrente.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione (MagicNumber). Il valore predefinito di -1 significa qualsiasi MagicNumber.


satop:

La funzione DistMarketAndPos().

Ci siamo! Andiamo a funzioni più interessanti! Per esempio, restituisce la distanza, in punti, tra il mercato e la posizione più vicina. La selezione più accurata delle posizioni da controllare è impostata da parametri esterni:

  • sy - Nome dello strumento. Se questo parametro è impostato, la funzione controllerà solo le posizioni dello strumento specificato. Il "" o NULL significa il simbolo corrente.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione (MagicNumber). Il valore predefinito -1 significa qualsiasi MagicNumber.


Cerco di farlo funzionare avanti e indietro e di aprire ordini avanti e indietro. Ho un errore, aiutatemi a risolverlo.

extern int TakeProfit = 150;

extern double Lot = 0,01;

extern inttern MAGIC = 1234;

int start()

{

se (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point)

}

ritorno(0);

}

intMarketAndPos(stringa sy="", int op=OP_BUY, int mn=-1)

{

doppia d, p;

int i, k=OrdersTotal(), r=1000000;


if (sy=="" || sy=="0") sy=Symbol();

p=MarketInfo(sy, MODE_POINT);

if (p==0) if (StringFind(sy, "")<0) p=0,00001; altrimenti p=0,01;

per (i=0; i<k; i++)

{

se(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

se ((OrderSymbol()==sy) && (op<0 || OrderType()==op))

{

se (mn<0 || OrderMagicNumber()==mn)

{

se (OrderType()==OP_BUY)

{

d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

se (r>d) r=NormalizeDouble(d, 0);

}

se (OrderType()==OP_SELL)

{

d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

se (r>d) r=NormalizeDouble(d, 0);

}

}

}

}

}

//----------------------------------------------------------------------------------------------------------------------------------------------


se (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);

}

ritorno(0);


{

intMarketAndPos(string sy="", int op=OP_SELL, int mn=-1) //questa linea dà 1 errore,

//se questa linea viene rimossa,

//compila, ma poi

//non metto op=OP_SELL,

//e senza di esso, l'Expert Advisor penserà,

//che l'ordine da cui volete calcolare

/la distanza è OP_BUY

if (sy=="" || sy=="0") sy=Symbol();

p=MarketInfo(sy, MODE_POINT);

if (p==0) if (StringFind(sy, "")<0) p=0,00001; altrimenti p=0,01;

per (i=0; i<k; i++)

{

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

se ((OrderSymbol()==sy) && (op<0 || OrderType()==op))

{

se (mn<0 || OrderMagicNumber()==mn)

{

se (OrderType()==OP_BUY)

{

d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

se (r>d) r=NormalizeDouble(d, 0);

}

se (OrderType()==OP_SELL)

{

d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

se (r>d) r=NormalizeDouble(d, 0);

}

}

}

}

}

ritorno(r);

ritorno(r);

}

}

//-------------------------------------------------------------------------------------------

GRAZIE

 
qwanya:


Stocercando di farlo funzionare avanti e indietro e di aprire ordini avanti e indietro con esso. Ho un bug che non riesco a eliminare, per favore aiutatemi a risolverlo.

GRAZIE


Dovresti provarlo:

E con le domande qui...

extern  int     TakeProfit = 150;
extern  double  Lot        = 0.01;
extern  int     MAGIC=1234;
      
      
//=====================================================================
  int    start()
      {
     if (DistMarketAndPos(NULL,OP_BUY)>150)
            {                                     
            OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point);
            }
          
     if (DistMarketAndPos(NULL,OP_SELL)>150)
            {                                     
         OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);   
            }            
       return(0);
       }
          
//========================================================================          
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Per favore lasciate i vostri commenti nel ramo dei sorgenti. Porta alla fonte (Caratteristiche utili da KimIV).
 
Per favore lasciate i vostri commenti nel ramo dei sorgenti. Porta alla fonte (Caratteristiche utili da KimIV).
 
satop:

Funzione MovingInWL().

Qualcuno può spiegare perché si dovrebbero postare funzioni che non funzionano?

'LevelWLoss' - identificatore non dichiarato
'LevelProfit' - identificatore non dichiarato
'ModifyOrder' - funzione non definita
'LevelWLoss' - identificatore non dichiarato
'LevelProfit' - identificatore non dichiarato
'ModifyOrder' - funzione non definita
6 errore/i, 0 avviso/i

e questo all'interno della funzione stessa

 
DenisovOleg:

Qualcuno può spiegare perché si dovrebbero postare funzioni che non funzionano?

'LevelWLoss' - identificatore non dichiarato
'LevelProfit' - identificatore non dichiarato
'ModifyOrder' - funzione non definita
'LevelWLoss' - identificatore non dichiarato
'LevelProfit' - identificatore non dichiarato
'ModifyOrder' - funzione non definita
6 errore/i, 0 avviso/i

e questo è dentro la funzione stessa

La funzione funziona, ma chiama la funzione ModifyOrder, che dovrebbe essere aggiunta al codice EA e anche aggiungere all'EA le variabili LevelWLoss e LevelProfit, qualcosa come questo

extern int LevelProfit = 1000;

extern int LevelWLoss = 50;

 
Виктор
Iurii Tokman

Grazie mille per questo thread del forum. Il più grande ringraziamento a lurii Tokman per le caratteristiche. Personalmente, sono quasi pronto a equipararlo a Stroustrup.
Grazie!

 
Iurii Tokman:

La funzione GetAmountLotFromOpenPos().

Questa funzione restituisce la somma dei lotti di posizioni aperte. Una selezione più accurata delle posizioni da prendere in considerazione è specificata da parametri esterni:

  • sy - Nome dello strumento di mercato. Se questo parametro è impostato, la funzione considererà solo le posizioni del simbolo specificato. Il valore predefinito "" significa qualsiasi strumento di mercato. NULL significa lo strumento corrente.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione, MagicNumber. Il valore predefinito -1 significa qualsiasi identificatore.

Non ritorna!!!

non importa come lo faccio, o zero o " funzione di gestione degli eventi non trovata 4.mq4 1 1
"

 
Aleksey Maryaskin:

Grazie mille per questo thread del forum. Il più grande ringraziamento a lurii Tokman per le caratteristiche. Personalmente, sono quasi pronto a equipararlo a Stroustrup.
Grazie!

Non dimenticate di ringraziare anche l'autore delle caratteristiche.
Motivazione: