[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 294

 
forexnew:
Non ho mai lavorato con DLL. Per caso hai un codice pronto?


Anche se non c'è niente di particolarmente difficile, solo una semplice sostituzione di un file con un altro.

Per fare una DLL è necessario programmare in un linguaggio diverso da MQL4. Alcune persone scrivono in C/C++. L'ho scritto in Delphi. Tutto sommato, dipende dai vostri bisogni.

Quando la DLL è pronta, viene collegata all'Expert Advisor e ad un'altra libreria di MQL4. Dopo di che potete chiamare le funzioni descritte nella DLL.

 
drknn:


Non ho fatto questo tipo di funzione, anche se se ci guardate, non c'è niente di particolarmente complicato - solo una stupida sostituzione di un file con un altro.

Potete fare dei collegamenti nel file system per leggere i log dallo script.
 

Caro, Igor Kim ha una funzione che restituisce il prezzo di apertura dell'ultima posizione aperta https://forum.mql4.com/ru/38949/page5#434239

Se non è difficile, scrivi una funzione che restituisca il prezzo di apertura della prima posizione aperta. Ho pensato che sarebbe stato sufficiente nella linea

t<OrderOpenTime()
Per sostituire "<" con ">" ma il risultato non funzionerà.
 

Salve.

Per favore, consigliate come implementare questa funzione, se possibile.

L'ordine 1 e TP sono collocati rispettivamente. Un ordine pendente 2 viene piazzato allo stesso tempo con l'ordine. Come cancellare il pendente quando il TP dell'ordine 1 è scattato.

 
strongest:

Salve.

Per favore, consigliate come implementare questa funzione, se possibile.

L'ordine 1 e TP è impostato di conseguenza. Un ordine pendente 2 viene piazzato allo stesso tempo con l'ordine. Come cancellare il pendente quando il TP dell'ordine 1 è scattato.


Chiamando la funzione commerciale OrderDelete()
 
Cosa deve essere cambiato per far funzionare il trailing stop a cinque cifre? Aumentare i pip di un fattore 10 non aiuta.
//+------------------------------------------------------------------+
//|                                                   e-Trailing.mq4 |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//| 12.09.2005 Автоматический Trailing Stop всех открытых позиций    |
//|            Вешать только на один график                          |
//| 21.01.2006 Параметр AllPositions                                 |
//+------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"

//------- Внешние параметры ------------------------------------------
extern bool   AllPositions   = False; // Управлять всеми позициями
extern bool   ProfitTrailing = True;  // Тралить только профит
extern int    TrailingStop   = 15;    // Фиксированный размер трала
extern int    TrailingStep   = 2;     // Шаг трала
extern bool   UseSound       = True;  // Использовать звуковой сигнал
extern string NameFileSound  = "expert.wav";  // Наименование звукового файла

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start() {
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (AllPositions || OrderSymbol()==Symbol()) {
        TrailingPositions();
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions() {
  double pBid, pAsk, pp;

  pp = MarketInfo(OrderSymbol(), MODE_POINT);
  if (OrderType()==OP_BUY) {
    pBid = MarketInfo(OrderSymbol(), MODE_BID);
    if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
      if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
        ModifyStopLoss(pBid-TrailingStop*pp);
        return;
      }
    }
  }
  if (OrderType()==OP_SELL) {
    pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
    if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
      if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
        ModifyStopLoss(pAsk+TrailingStop*pp);
        return;
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) {
  bool fm;

  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if (fm && UseSound) PlaySound(NameFileSound);
}
//+------------------------------------------------------------------+
 
david2:
Cosa deve essere cambiato per far funzionare il trailing stop a cinque cifre? Aumentarlo di 10 volte non aiuta.

Molto probabilmente il problema sono i prezzi non normalizzati.
 
PapaYozh:

È probabile che il problema siano i prezzi non normalizzati.
Scusa, ma oltre al pulsante del terminale, avresti dovuto premere l'ulteriore conferma nella finestra dell'EA per permettere all'EA di negoziare.
 
Sancho77:

Caro, Igor Kim ha una funzione che restituisce il prezzo di apertura dell'ultima posizione aperta https://forum.mql4.com/ru/38949/page5#434239

Se non è difficile, scrivi una funzione che restituisca il prezzo di apertura della prima posizione aperta. Ho pensato che sarebbe stato sufficiente nella linea

Sostituisci "<" con ">" ma non funziona.

E per chiarire? Scegliere il primo tra quelli aperti (quelli che sono sul mercato) o quelli che sono già chiusi? E se la prima posizione è stata aperta tre anni fa? Deve essere selezionato ?

A cosa serve tutto questo?

 

Ciao Compagni!

Potete per favore consigliarmi se posso determinare se l'ordine precedente è stato chiuso al Take Profit o no? Se sì, come dovrei implementarlo programmaticamente?

Sarei grato per un link se questa domanda è già stata discussa

Motivazione: