Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1341

 
DanilaMactep:

IL PREZZO PER IMPOSTARE UNA FUGA SI CALCOLA COSÌ (MAKAR, NON SEI IL MIO TIPO DA TOCCARE ;-))

COME FACCIO A CONTROLLARE SE IL VALORE OTTENUTO RIENTRA NELL'INTERVALLO CONSENTITO? NON CAPISCO COSA DOVREI FARE, E COME MI ASSICURO CHE SE IL VALORE CALCOLATO È INFERIORE A QUELLO CONSENTITO, L'ORDINE VERREBBE COMUNQUE APERTO ALLA DISTANZA MINIMA POSSIBILE?

Prova questo,

Credo che lo capirete.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2013                                                     |
//|  Описание : Выполняет корректирование ценовых уровней под STOPLEVEL.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование торгового инструмента                                 |
//|    op - торговая операция                                                  |
//|    pp - цена открытия/установки                                            |
//|    sl - ценовой уровень StopLoss                                           |
//|    tp - ценовой уровень TakeProfit                                         |
//+----------------------------------------------------------------------------+
void CorrectingPrice(string sy, int op, double& pp, double& sl, double& tp) {
  if (sy=="" || sy=="0") sy=Symbol();
  RefreshRates();
  int    di=MarketInfo(sy, MODE_DIGITS);
  int   msl=MarketInfo(sy, MODE_STOPLEVEL);
  int    sp=MarketInfo(sy, MODE_SPREAD);
  double mp=MarketInfo(sy, MODE_POINT);
  double pa=MarketInfo(sy, MODE_ASK);
  double pb=MarketInfo(sy, MODE_BID);
  double ds=NormalizeDouble(pp-sl, di);
  double dp=NormalizeDouble(pp-tp, di);

  if (msl==0) msl=2*sp;
  switch (op) {
    case OP_BUY:
      pp=pa;
      sl=pp-ds;
      tp=NormalizeDouble(pp-dp, di);
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELL:
      pp=pb;
      sl=NormalizeDouble(pp-ds, di);
      tp=pp-dp;
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_BUYLIMIT:
      if (pp>pa-msl*mp) {
        pp=pa-msl*mp;
        sl=pp-ds;
        tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_BUYSTOP:
      if (pp<pa+msl*mp) {
        pp=pa+msl*mp;
        if (sl>0) sl=pp-ds;
        if (tp>0) tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELLLIMIT:
      if (pp<pb+msl*mp) {
        pp=pb+msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_SELLSTOP:
      if (pp>pb-msl*mp) {
        pp=pb-msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    default:
      Message("CorrectingPrice(): Неизвестная торговая операция!");
      break;
  }
}
 
Alekseu Fedotov:

Prova questo,

Credo che ci si abituerà.

Alexey, grazie mille per questo pezzo di codice. Ma purtroppo non posso leggere il codice degli altri a causa delle conseguenze dell'ictus. Posso chiedervi un'istruzione su come usare questo codice e una raccomandazione su cosa attaccarlo e come farlo?

Ecco cosa ho capito. Stavo cercando un prezzo minimo per gli x-bar come questo

  int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          double min_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МИНИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        

ma questo non è corretto, perché io assegno il prezzo minimo aihai, non basso. corretto per basso e l'errore è minore, ma ancora si verifica(((

Quindi, se non è difficile, mandate istruzioni su come usare un pezzo di codice scontato...

 

Ciao a tutti againJ ha provato ad applicare i consigli che avete scritto al mio ultimo post, ma non è servito. Sto ancora ottenendo l'errore 130L, ma probabilmente non è lo stop loss stesso, ma il prezzo aperto. Il prezzo aperto per un buy stop e un sell stop si ottiene determinando il prezzo massimo/minimo per un numero x di candele, in questo modo.

          int max_bars= iHighest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double max_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          max_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          );  //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ПОКУПАК*********** 
          
          //----ПОЛУЧЕНИЕ ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПРОДАЖ
          
          
                    int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double min_Price=iLow(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          ); // КОНЕЦ АЙЛОУ

Il problema non è con lo stop perché uso lo stesso esatto stop e atp e fisso, gli ordini a mercato si aprono senza errori. Significa che il problema è nel calcolo del prezzo per impostare un ordine pendente. Apro gli ordini stessi in questo modo

OrderSend(Symbol(),OP_SELLSTOP,lot,min_Price,slippages,min_Price+sl , min_Price-tp ,comment_ao_otloj_sell); // ОТКРКЫВВАЕМ ОТЛОЖЕННЫЙ СЕЛ ОРДЕР

OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,magik_number,TimeCurrent()+order_life_time); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР


P/S e ho dimenticato di dirvi che voglio usare gli ordini pendenti per simulare una specie di filtro di prezzo per aprire una posizione, cioè se il prezzo va nella direzione giusta, un ordine pendente scatterà, ma se non lo fa, si annullerà e sarò fuori mercato. Cosa sto sbagliando nel determinare il prezzo di apertura? E forse c'è una soluzione più semplice sul filtro dei prezzi per l'affare?

p/s molto gentilmente, se scrivete un codice che può essere applicato, scrivete un'istruzione dettagliata per esso poiché sto avendo seri problemi a leggere il codice. Un'istruzione dettagliata intendo, a cosa serve questo codice e come può essere applicato (per attaccarlo a una variabile e fare qualcosa con essa o altro, e per favore scrivete i vostri commenti al codice in modo più comprensibile). Grazie in anticipo ;-) P/S che ha conoscenza e ha esperienza non andare da, aiutare un fraterno - non fregare ;-) devono finire il Graal OP ;-).

 
Colleghi!

Che lavorava con gli oggetti. Per favore, mandami un esempio di un pezzo di codice, dove un triangolo, un'ellisse o un quadrato disegnato manualmente (penso che abbia un nome sul grafico) eseguirà qualche azione - per esempio, un allarme (nel caso in cui il prezzo colpisca l'oggetto). Ti sto implorando molto. Non ne so molto e non riesco a capire la teoria nel libro di riferimento, ma sospetto che il principio sia elementare.
 
DanilaMactep:

Ciao a tutti againJ ha provato ad applicare i consigli che avete scritto al mio ultimo post, ma non è servito. Sto ancora ottenendo l'errore 130L, ma probabilmente non è lo stop loss stesso, ma il prezzo aperto. Il prezzo aperto per un buy stop e un sell stop si ottiene determinando il prezzo massimo/minimo per un numero x di candele, in questo modo.

Il problema non è con lo stop perché uso lo stesso esatto stop e atp e fisso, gli ordini a mercato si aprono senza errori. Significa che il problema è nel calcolo del prezzo per impostare un ordine pendente. Apro gli ordini stessi in questo modo


P/S e ho dimenticato di dirvi che voglio usare gli ordini pendenti per simulare una specie di filtro di prezzo per l'apertura di una posizione, cioè se il prezzo va nella giusta direzione, un ordine pendente scatterà, ma se non lo fa, si annullerà e sarò fuori mercato. Cosa sto sbagliando nel determinare il prezzo di apertura? E forse c'è una soluzione più semplice sul filtro dei prezzi per l'affare?

p/s molto gentilmente, se scrivete un codice che può essere applicato, scrivete un'istruzione dettagliata per esso poiché sto avendo seri problemi a leggere il codice. Un'istruzione dettagliata intendo, a cosa serve questo codice e come può essere applicato (per attaccarlo a una variabile e fare qualcosa con essa o altro, e per favore scrivete i vostri commenti al codice in modo più comprensibile). Grazie in anticipo ;-) P / S che ha conoscenza e ha esperienza non passare, aiutare un fraterno - non fregare ;-) devo finire il Graal O_o ;-)

Nella funzione iLowest, invece di MODE_HIGH, inserite MODE_LOW.

 

Puoi darmi un suggerimento? Ho disegnato un segmento di linea su un grafico. Ho bisogno di sapere i prezzi di inizio e fine del segmento. Si può fare?

File:
EURUSDM1.png  22 kb
 
Forallf:

Puoi darmi un suggerimento? Ho disegnato un segmento di linea su un grafico. Ho bisogno di sapere i prezzi di inizio e fine del segmento. Si può fare?

Puoi farlo su
 
Forallf:

Puoi darmi un suggerimento? Ho disegnato un segmento di linea su un grafico. Ho bisogno di sapere i prezzi di inizio e fine del segmento. Si può fare?

È auspicabile che questo segmento abbia un nome originale

 
Alekseu Fedotov:

Nella funzione iLowest, invece di MODE_HIGH, inserite MODE_LOW.

Grazie mille per aver notato e sollecitato - ho corretto questo caso e durante il test di 2 anni ci sono stati 130 26 errori. Allo stesso tempo 115 scambi si sono aperti normalmente
 
Порт-моне тв:
Colleghi!

Che lavorava con gli oggetti. Per favore, mandami un esempio di un pezzo di codice, dove un triangolo, un'ellisse o un quadrato disegnato manualmente (penso che abbia un nome sul grafico) eseguirà qualche azione - per esempio, un allarme (nel caso in cui il prezzo colpisca l'oggetto). Ti sto implorando molto. Non so molto di questo argomento e non capisco la teoria del libro di riferimento, ma sospetto che il principio sia elementare.

Qualcuno mi aiuta?