Per favore, guidatemi per quanto riguarda lo spread - pagina 2

 
GumRai:

Penserei che si potrebbe ottenere questo codificato per 20 o 30 $

Giusto... grazie... Vediamo se riesco a trovare prima qualcosa di gratuito, se non trovo nulla, pubblicherò un lavoro.
 
GumRai:

Penserei che si potrebbe ottenere questo codificato per 20 o 30 $

In realtà, come ora avete CONFERMATO che l'ordine di chiusura considera già lo spread, penso che lo script di cui sopra dovrebbe funzionare per me .. grazie .. Tutto quello che devo impostare in questo è 10 pips .. e si chiuderà automaticamente come dici tu utilizzando il valore ASK se è un corto e utilizzando un valore BID se è un lungo .. e somma totale di questo come profitto totale del conto e chiude tutti gli ordini aperti .. non tocca l'ordine in sospeso quindi tutto bene .. grazie mille ... inoltre, potresti spiegarmi ... nel programma di cui sopra si dice slippage = 5 .. cosa significa per questo script? come si svolgerà quando lo script chiude un ordine? oh e anche, è uno script o EA? o come differenziare tra i due? [ COME FATE VOI RAGAZZI A IMPARARE COSÌ TANTE COSE >.< ]
 
tatyawinchu:

Grazie un sacco... molto chiaro e molto utile... mi chiedo quanto costerebbe per pubblicare un tale lavoro? Quanto sarebbe difficile u tasso tale codice può essere? Il codice che ho ottenuto dal web che ho postato sopra sembra ENORME... Voglio dire che davvero non posso sborsare migliaia di dollari...


Ciao di nuovo,

Non c'è bisogno di preoccuparsi, Il codice per quello che vuoi non dovrebbe essere così complicato e, giusto perché tu lo sappia, se mai avessi bisogno di pubblicare un lavoro, sei tu che hai il controllo, offri quanto puoi permetterti e pensi che valga la pena!

D'altra parte, se sei come me, proverei prima l'opzione gratuita. Niente da perdere, forse guadagnerai qualche amico e imparerai qualcosa nel frattempo.

Saluti

 
tatyawinchu:

In realtà, come ora avete CONFERMATO che la chiusura dell'ordine considera già lo spread, penso che lo script di cui sopra dovrebbe funzionare per me .. grazie .. Tutto quello che devo impostare in questo è 10 pips .. e si chiuderà automaticamente come dici tu utilizzando il valore ASK se è un corto e utilizzando un valore BID se è un lungo .. e somma totale di questo come profitto totale del conto e chiude tutti gli ordini aperti .. non tocca l'ordine in sospeso quindi tutto bene .. grazie mille ... inoltre, potresti spiegarmi ... nel programma di cui sopra si dice slippage = 5 .. cosa significa per questo script? come si svolgerà in quando lo script chiude un ordine? oh e anche, è uno script o EA? o come differenziare tra i due? [ COME FATE VOI RAGAZZI A IMPARARE COSÌ TANTE COSE >.< ]


Ciao di nuovo,

Come sempre, c'è una buona notizia e una cattiva notizia. Vuoi prima la cattiva o la buona notizia?

Eccola qui e se non mi sono spiegato abbastanza bene, fatemelo sapere: per un EA che esca dalle operazioni in base al profitto del conto, ha bisogno di sapere quale era il capitale del conto prima che l'operazione fosse piazzata, per avere un punto di partenza. Ha senso?

Se non hai un punto di partenza con cui confrontare o se non c'è confronto, l'EA non chiuderà mai il tuo trade finché il profitto del conto è negativo o chiuderà immediatamente tutti i trade se il profitto del conto è positivo e superiore a 100 o qualunque sia il limite.

Ha senso?

Lo slippage è la quantità massima di deviazione dal prezzo che si permette al broker di piazzare o chiudere l'ordine senza riquotare se si apre o si chiude al prezzo di mercato.Poiché il Bid e l'Ask cambiano continuamente, quando il tuo ordine raggiunge il server se il valore del prezzo (bid o ask) è entro i limiti dello slippage, l'ordine sarà processato, altrimenti sarà riquotare.

Sì, il tuo codice è un EA. Uno script di solito viene eseguito solo una volta, si ottiene un nuovo tick, si esegue il codice e si esce. Un EA gira continuamente finché lo lasci girare.

Come fai a distinguerli? A volte è difficile dato che lavorano in modo simile. Quando viene creato un nuovo script, assomiglia a questo:

//+------------------------------------------------------------------+
//|                                                   TestScript.mq4 |
//|                             Copyright 2014, 3D@tm Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, 3D@tm Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   
  }
//+------------------------------------------------------------------+

Puoi vedere che ha solo la funzione OnStart e dice: funzione di avvio del programma script.

Tornando al tuo problema, se esegui un EA che controlla l'equity del conto quando non vengono piazzati ordini e lo prende come punto di riferimento, può poi chiudere tutti gli ordini quando viene raggiunto il profitto desiderato per conto.

Il valore di un pip (denaro per pip) non è lo stesso per tutte le valute: un pip nella coppia AUDUSD non ha lo stesso valore della coppia GBPJPY.

Stai cercando simboli specifici per questo EA o non importa quale simbolo, solo per chiudere tutti gli ordini quando il profitto per conto è raggiunto?

Inoltre, lo stop loss dovrebbe essere legato al capitale del conto o all'ordine/alla coppia?

So che sembra complicato ma non lo è poi così tanto. I nostri computer sono così stupidi che se non si specifica esattamente ciò che si vuole, si perdono.

Ti è stato d'aiuto? Spero di sì.

Saluti

 

Thrdel

Sono abbastanza sicuro che AccountProfit() restituisca il profitto totale per i trade aperti correnti. Non è ovvio dalla documentazione però.

 
GumRai:

Thrdel

Sono abbastanza sicuro che AccountProfit() restituisca il profitto totale per i trade aperti correnti. Non è ovvio dalla documentazione però.


Hmm ...

 AccountProfit() 

Invece io uso ...

double AccProfits=AccProfits+OrderProfit();

Dipende da quello che vuoi ottenere.

 
GumRai:

Thrdel

Sono abbastanza sicuro che AccountProfit() restituisca il profitto totale per i trade aperti correnti. Non è ovvio dalla documentazione però.


Ciao GumRai,

Hai ragione, non è molto ovvio dalla documentazione, ma l'ho testato e di nuovo, hai ragione, è la somma dei profitti/perdite su tutti gli ordini aperti.

Bel colpo. Grazie.

Ancora non posso usare Account Profit se voglio gestire solo gli ordini aperti manualmente e ho bisogno di selezionare da altri ordini che possono essere piazzati da altri EA.

Immagino che selezionare per numero magico = 0 dovrebbe fare il trucco. E poi sommare i profitti come suggerito da deysmacro .

Credo di vederla così. Cosa ne pensate, ragazzi?

//+------------------------------------------------------------------+
//|                                       CloseOrdersOnProfit_v1.mq4 |
//|                             Copyright 2014, 3D@tm Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, 3D@tm Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//---
#include <stdlib.mqh>
//---
#define  RETRYCOUNT    10
#define  RETRYDELAY    500
#define  LONG          1
#define  SHORT         -1
#define  ALL           0
//---
extern int     Slippage=3;
input  double  ProfitTarget=100.0;
input  double  StopLossLimit=50.0;
input  bool    WriteScreenshots=true;
//---
double StartEquity=0;
int    myOrders;
//===================================================================
/*
This EA will manage manually placed orders and skip the orders that
have a magic number different from zero.
If the Profit target - the sum of profit/loss on all orders (except
orders placed by other EA's ) is reached, all those orders are
closed.
If the maximum amount of money allowed for a loss is reached, EA
will close all those orders and an alert will pop up.
*/
//===================================================================
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(Digits==3 || Digits==5) Slippage*=10;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- count orders manually placed (no magic number)
   CountMyOrders();
//--- reset account equity / take a reference point
   if(myOrders<1)
     {
      StartEquity=AccountEquity();
      //--- no orders detected, wait for orders to be placed
      return;
     }
//--- calculate profit
   double myProfit=CalculateProfit();
//--- if profit target reached, exit all
   if(myProfit>=ProfitTarget)
     {
      ExitAll(ALL);
      Alert("Orders closed due to profit target reached");
     }
//--- exit if stop limit reached
   if(StartEquity-AccountEquity()>=StopLossLimit)
     {
      ExitAll(ALL);
      Alert("Orders closed due to stop loss limit reached");
     }

   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CountMyOrders()
  {
   myOrders=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {
         myOrders++;
        }
     }
   return(myOrders);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CalculateProfit()
  {
   double Profit=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {
         Profit=Profit+OrderProfit();
        }
     }
   return(Profit);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ExitAll(int direction)
  {

   string total=IntegerToString(OrdersTotal(),0,0);

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      Comment(StringConcatenate("Closing trade #",(i+1)));
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      //---
      if(OrderType()==OP_BUY &&(direction==LONG ||  direction==ALL)) { Exit(OrderSymbol(),OrderTicket(),LONG,OrderLots(),Blue); }
      if(OrderType()==OP_SELL &&(direction==SHORT|| direction==ALL)) { Exit(OrderSymbol(),OrderTicket(),SHORT,OrderLots(),Red); }
     }
   Comment(StringConcatenate(total," trades closed."));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Exit(string symb ,int ticket,int dir,double volume,color clr,int t=0)
  {
   int i=0,j=0,cmd=0;
   double prc=0,sl=0,tp=0,lots=0;
   string cmt;
   double bid=MarketInfo(symb,MODE_BID);
   double ask=MarketInfo(symb,MODE_ASK);
   bool closed;

   Print("Exit("+IntegerToString(dir,0,0)+","+DoubleToStr(volume,3)+","+IntegerToString(t,0,0)+")");

   for(i=0; i<RETRYCOUNT; i++) 
     {
      for(j=0;(j<50) && IsTradeContextBusy(); j++)
         Sleep(100);
      RefreshRates();

      if(dir==LONG) 
        {
         prc=bid;
        }
      if(dir==SHORT) 
        {
         prc=ask;
        }
      Print("Exit: prc="+DoubleToStr(prc,Digits));

      closed=OrderClose(ticket,volume,prc,Slippage,clr);
      if(closed)
        {
         Print("Trade closed");
         Screenshot("Exit");

         return (true);
        }

      Print("Exit: error \'"+ErrorDescription(GetLastError())+"\' when exiting with "+DoubleToStr(volume,3)+" @"+DoubleToStr(prc,Digits));
      Sleep(RETRYDELAY);
     }

   Print("Exit: can\'t enter after "+IntegerToString(RETRYCOUNT,0,0)+" retries");
   return (false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Screenshot(string moment_name)
  {
   if(WriteScreenshots)
      WindowScreenShot(WindowExpertName()+"_"+Symbol()+"_M"+IntegerToString(Period(),0,0)+"_"+
                       IntegerToString(Year(),0,0)+"-"+two_digits(Month())+"-"+two_digits(Day())+"_"+
                       two_digits(Hour())+"-"+two_digits(Minute())+"-"+two_digits(Seconds())+"_"+
                       moment_name+".gif",1024,768);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string two_digits(int i)
  {
   if(i<10)
      return ("0"+IntegerToString(i,0,0));
   else
      return (""+IntegerToString(i,0,0));
  }
//+------------------------------------------------------------------+
 
thrdel:


Ciao GumRai,

Hai ragione, non è molto ovvio dalla documentazione ma l'ho testato e di nuovo, hai ragione, è la somma dei profitti/perdite su tutti gli ordini aperti.

Bel colpo. Grazie.

Ancora non posso usare Account Profit se voglio gestire solo gli ordini aperti manualmente e ho bisogno di selezionare da altri ordini che possono essere piazzati da altri EA.

Immagino che selezionare per numero magico = 0 dovrebbe fare il trucco. E poi sommare i profitti come suggerito da deysmacro .

Credo di vederla così. Cosa ne pensate?


questo fallisce .....

per molti scambi prc non è il prezzo giusto

anche non fare

  if(Digits==3 || Digits==5) Slippage*=10;

se cambi più volte il tuo timeframe ......

 
deVries:


questo fallisce .....

per molti scambi il prc non è il prezzo giusto

inoltre non fare

se cambi più volte il tuo timeframe ......


deVries,

tutto fallisce e non dovrei farlo se lo dici tu, ma visto che non vedo molto aiuto nella tua risposta .....

Capisci che il codice non è un EA commerciale destinato alla vendita ad un cliente pignolo, vero Stiamo cercando di risolvere qualcosa e se non vuoi aiutare, dovresti almeno lasciare perdere.

Credi davvero che se cambio il time frame diverse volte..... cosa? Lo slippage sarà di 3000000 ? Non nel mio MT4 a quanto pare. E se non mi credi, fai un test tu stesso.

Il mio test dice che quando si cambia il time frame, l'EA passa attraverso il ciclo di deinit/init e poiché il codice menzionato è nell'OnInit, lo Slippage sarà proprio a 30 punti ogni volta.

Come chiunque può vedere, cambiare i time frame non porterà lo Slippage a un milione, se questo è ciò che stai suggerendo.

E no, non è un'immagine falsa, è reale, potete controllare il tempo di cambiare ogni time frame.

Spero che aiuti.

 
thrdel:


Ciao di nuovo,

Come sempre, c'è una buona notizia e una cattiva notizia. Vuoi prima la cattiva o la buona notizia?

Eccola qui e se non mi spiego abbastanza bene, fatemelo sapere: perché un EA possa uscire dai trade in base al profitto del conto, ha bisogno di sapere quale era il capitale del conto prima che il trade fosse piazzato, per avere un punto di partenza. Ha senso?

Se non hai un punto di partenza con cui confrontare o se non c'è confronto, l'EA non chiuderà mai il tuo trade finché il profitto del conto è negativo o chiuderà immediatamente tutti i trade se il profitto del conto è positivo e superiore a 100 o qualunque sia il limite.

Ha senso?

Lo slippage è la quantità massima di deviazione dal prezzo che si permette al broker di piazzare o chiudere l'ordine senza riquotare se si apre o si chiude al prezzo di mercato.Poiché il Bid e l'Ask cambiano continuamente, quando il tuo ordine raggiunge il server se il valore del prezzo (bid o ask) è entro i limiti dello slippage, l'ordine sarà processato, altrimenti sarà riquotare.

Sì, il tuo codice è un EA. Uno script di solito viene eseguito solo una volta, si ottiene un nuovo tick, si esegue il codice e si esce. Un EA gira continuamente finché lo lasci girare.

Come fai a distinguerli? A volte è difficile dato che lavorano in modo simile. Quando viene creato un nuovo script, assomiglia a questo:

Puoi vedere che ha solo la funzione OnStart e dice: funzione di avvio del programma script.

Tornando al tuo problema, se esegui un EA che controlla l'equity del conto quando non vengono piazzati ordini e lo prende come punto di riferimento, può poi chiudere tutti gli ordini quando viene raggiunto il profitto desiderato per conto.

Il valore di un pip (denaro per pip) non è lo stesso per tutte le valute: un pip nella coppia AUDUSD non ha lo stesso valore della coppia GBPJPY.

Stai cercando simboli specifici per questo EA o non importa quale simbolo, solo per chiudere tutti gli ordini quando il profitto per conto è raggiunto?

Inoltre, lo stop loss dovrebbe essere legato al capitale del conto o all'ordine/alla coppia?

So che sembra complicato ma non lo è poi così tanto. I nostri computer sono così stupidi che se non si specifica esattamente ciò che si vuole, si perdono.

Ti è stato d'aiuto? Spero di sì.

Grazie


thrdel:


Ciao di nuovo,

Come sempre, c'è una notizia buona e una cattiva. Vuoi prima la cattiva o la buona notizia?

Eccola qui e se non mi sono spiegato abbastanza bene, fammelo sapere: perché un EA possa uscire dai trade in base al profitto del conto, ha bisogno di sapere quale era il capitale del conto prima che il trade fosse piazzato, per avere un punto di partenza. Ha senso?

Se non hai un punto di partenza con cui confrontare o se non c'è confronto, l'EA non chiuderà mai il tuo trade finché il profitto del conto è negativo o chiuderà immediatamente tutti i trade se il profitto del conto è positivo e superiore a 100 o qualunque sia il limite.

Ha senso?

Lo slippage è la quantità massima di deviazione dal prezzo che si permette al broker di piazzare o chiudere l'ordine senza riquotare se si apre o si chiude al prezzo di mercato.Poiché il Bid e l'Ask cambiano continuamente, quando il tuo ordine raggiunge il server se il valore del prezzo (bid o ask) è entro i limiti dello slippage, l'ordine sarà processato, altrimenti sarà riquotare.

Sì, il tuo codice è un EA. Uno script di solito viene eseguito solo una volta, si ottiene un nuovo tick, si esegue il codice e si esce. Un EA gira continuamente finché lo lasci girare.

Come fai a distinguerli? A volte è difficile dato che lavorano in modo simile. Quando viene creato un nuovo script, assomiglia a questo:

Puoi vedere che ha solo la funzione OnStart e dice: funzione di avvio del programma script.

Tornando al tuo problema, se esegui un EA che controlla l'equity del conto quando non vengono piazzati ordini e lo prende come punto di riferimento, può poi chiudere tutti gli ordini quando viene raggiunto il profitto desiderato per conto.

Il valore di un pip (denaro per pip) non è lo stesso per tutte le valute: un pip nella coppia AUDUSD non ha lo stesso valore della coppia GBPJPY.

Stai cercando simboli specifici per questo EA o non importa quale simbolo, solo per chiudere tutti gli ordini quando il profitto per conto è raggiunto?

Inoltre, lo stop loss dovrebbe essere legato al capitale del conto o all'ordine/alla coppia?

So che sembra complicato ma non lo è poi così tanto. I nostri computer sono così stupidi che se non si specifica esattamente ciò che si vuole, si perdono.

Ti è stato d'aiuto? Spero di sì.

Saluti

Ciao di nuovo

Grazie per una risposta molto chiara... e grazie per essere stato molto utile .Ora capisco molto che hai insegnato...

"Stai cercando simboli specifici per questo EA o non importa quale simbolo, solo per chiudere tutti gli ordini quando il profitto per conto è raggiunto?" = la seconda metà con alcune condizioni è il requisito

"solo per chiudere tutti gli ordini quando il profitto per conto è raggiunto"

Ok, io commercio solo 2 coppie alla volta... Prima apro un ordine su una coppia... se mi va contro, lo copro con un ordine sull'altra coppia...

Sto cercando un EA che faccia le seguenti cose:

1) Non faccia nulla se non c'è nessun ordine o solo un ordine

2) Dovrebbe CHIUDERE sul profitto X SOLO se ci sono DUE ordini in esecuzione, altrimenti andare al punto 1)

3) Mentre chiude X, dovrebbe considerare lo spread da pagare e considerare X come profitto NETTO [ questo è già stato spiegato sopra che AccountProfit() nega direttamente lo spread che dovete pagare e vi mostra il profitto netto e non lordo... correggete se sbagliato ]

4) Come puoi vedere, SL e TP non sono un problema, non li uso quindi non sono necessari nell'EA

Ora, sono totalmente d'accordo con te per quanto riguarda le cose gratuite, anche se non conosco il codice, penso che più della metà di ciò di cui ho bisogno è già presente nell'EA di cui sopra... devo solo trovare qualcosa da cambiare che faccia ciò che fa solo quando due ordini sono aperti... penso che abbia a che fare con quel ciclo FOR lì... o qualcosa del genere... =D [ Ok, ora sono geloso che voi ragazzi sappiate leggere il codice e io no! .. ora mi sento come uno stupido del 20° secolo! ahahha nel 21° secolo tutti devono conoscere il codice >.< ]

Ho fatto un rapido diagramma di flusso mentale delle mie esigenze

L'EA parte ---> Non fa nulla finché non c'è 0 o 1 ordine ----> Fa un 'suono di apertura di chiamata' quando il 2° ordine viene attivato ----> Chiude entrambi gli ordini a X quantità di puro profitto [dopo aver considerato lo spread] e fa un 'suono di chiusura di chiamata' ]

Naturalmente, i file audio di apertura e chiusura delle chiamate possono essere qualsiasi piccolo file wave... facilmente disponibile su mt4 stesso. ... penso che queste cose possano essere ottenute nell'EA di cui sopra che avevo postato cambiando alcune cose! hehehe aiutami plz =D