
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ok, quindi se usi
double stop;
stop=stoploss*Point();
Print(DoubleToString(stoploss));
Usando la funzione Point() questo dovrebbe ottenere il vostro valore di stoploss e poi dovete aggiungerlo o sottrarlo rispettivamente da Bid e Ask per darvi il livello di prezzo del vostro stop.
Lo stesso funziona per il take profit, ma ovviamente al contrario.
Puoi controllare alcuni EA in code base, ci sono molti esempi e variazioni su come i codificatori fanno queste cose nei loro EA.
Per esempio questo si chiama Trailing Master https://www.mql5.com/en/code/16136
// 1. Main function
//-------------------------------------------------------------------------
void OnTick(void)
{
Comment("Copyright © 2016, Il Anokhin\n"+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
//--- 1.1. Define pip -----------------------------------------------------
if(Digits==4 || Digits<=2) pip=Point;
if(Digits==5 || Digits==3) pip=Point*10;
//--- 1.2. Trailing -------------------------------------------------------
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==Symbol() && TS>0 && OrderProfit()>0)
{
if(UC==true && OrderComment()==Comm && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==true && OrderComment()==Comm && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
if(UC==true && OrderComment()==Comm && UM==false && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==true && OrderComment()==Comm && UM==false && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==false && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==false && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
}
}
}
//--- 1.3. End of main function -------------------------------------------
Dove potete vedere il coder Il Anokhin pugno definisce pip.
Ma ecco un altro esempio chiamato E-smart trailing da Димаhttps://www.mql5.com/en/code/8674
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int stoploss)
{
bool result;
double sl = 0;
double point = MarketInfo(OrderSymbol(),MODE_POINT);
if (OrderType() == OP_BUY) sl = OrderOpenPrice() + stoploss * point;
if (OrderType() == OP_SELL) sl = OrderOpenPrice() - stoploss * point;
result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE);
if (result && UseSound) PlaySound(var_132);
}
//+------------------------------------------------------------------+
Notate le sottili differenze nel fare le cose.
Provo sempre varie cose finché non trovo qualcosa che funziona meglio.
Ok, quindi se usi...
Omg, solo un rapido controllo incredibile grazie per tutto prima di iniziare a leggere e provare qualcosa. Lo proverò presto.
Ancora una volta enorme grazie @Marco vd Heijden
Gli oggetti sono impilati l'uno sull'altro, quindi è importante far sapere a chartevent () quali clic su quale pulsante o oggetti hanno la massima priorità rispetto ad altri oggetti che potrebbero sovrapporsi.
Enorme grazie Uomo, mi è piaciuto il tuo commento che uno che sono più chiaramente e più utile.
Tutto il meglio per te.
Ok, quindi se usi
Provo sempre varie cose finché non trovo qualcosa che funziona meglio.
Sto solo cercando di capire il tuo buon commento e poi scrivere qualche buon codice per i miei ordini, funzioni Stop Loss e Take Profit - grazie per questo.
Allora, ho già provato qualcosa come il seguente codice, e ho bisogno di essere sicuro che sia EURUSD che FB abbiano un valore di Stop Loss giusto, per 10 pips? ( se vuoi sapere cosa sto pensando - penso solo che sì, sotto i registri / risultati sono entrambi il giusto valore per 10 pips. )
es: valore di stoploss = 10; Posizione - COMPRA
log: EURUSD | prezzo (ask): 1.05633 / Stop Loss: 1.05533
log: FB | prezzo (ask): 119.69/ Stop Loss: 119.59
( Chiamo la funzione sottostante con void OnChartevent() )
//---
if ( sparam == _buy_name_btn )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
_Buy_calc_SL_TP();
Print( " | Click Verify / ");
}
//---
return;
{
//---
if ( _StopLoss_ON == true )
{
//_Sl = OrderOpenPrice() - _StopLoss * _Pip;
_Sl = Ask - _StopLoss * _Pip;
Print( " | Buy Calc SL TP Function / StopLoss: ", _Sl );
}
//---
return;
}
Sembra funzionare.
Cercherò di coinvolgere il commento del signor William a capo del codice EA - grazie ancora una volta William.Grande calcolo di Pip MQL4
(per favore non biasimatemi perché questo settore del codice sembra molto ampio per me, e a volte perdo la testa - in ogni caso spero di finire presto i codici del mio EA Trade Panel)
E condividerò il mio codice di test EA dopo averlo finito per sapere se il codice è buono / giusto o cosa? (perché non sono un codificatore / programmatore professionista - ci sto lavorando - )
Keith Watford:
Ok, mi sembra giusto. Non posso essere disturbato a leggere alcuni dei tuoi post perché mi fanno male gli occhi.
Se altri si sentono allo stesso modo, allora siete voi a perdervi, non io.
Il mercato è chiuso e non sono sicuro di nient'altro. Ma ho provato qualcosa come il codice qui sotto, sento di aver perso qualcosa ma non riesco a trovarlo.
(Vorrei menzionare che il mio pannello di trading EA ha un codice per aprire posizioni di acquisto e di vendita, ma sto cercando di scriverlo a mano, che sono sicuro di come funziona questo EA)
Grazie in anticipo per il vostro aiuto e consiglio.
#define POINT int ///< `CHANGE / _Point`.
#define PIP double ///< `POINT / PipsPerPOINT`.
CHANGE points_to_change(POINT n){ return n * _Point ;}
POINT change_to_points(CHANGE c){ return POINT(c / _Point + 0.5) ;}
CHANGE pips_to_change (PIP n){ return points_to_change(pips_to_points(n));}
PIP change_to_pips (CHANGE c){ return points_to_pips(change_to_points(c));}
POINT pips_to_points (PIP n){ if( (_Digits&1) == 1) n *= 10.0; return POINT(n);}
PIP points_to_pips (POINT n){ PIP p = n; if( (_Digits&1) == 1) p /= 10.0; return p;}
string prfx = "test" ;
string sellbutton = prfx + "sell" ;
string sounduse = "tick.wav" ;
int stoploss = 10 ;
int takeprofit = 10 ;
int magic = 12345 ;
int ticket = 0 ;
int slippage = 3 ;
double lot = 0.01 ;
double sl ;
bool stoploss_on = true ;
bool result ;
bool sound_use = true ;
//---
//---
int OnInit()
{
ObjectCreate ( 0, sellbutton, OBJ_BUTTON , 0, 0, 0 );
ObjectSetString ( 0, sellbutton, OBJPROP_TEXT , "Sell" );
ObjectSetInteger ( 0, sellbutton, OBJPROP_XDISTANCE , 20 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_YDISTANCE , 20 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_XSIZE , 80 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_YSIZE , 40 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_CORNER , CORNER_LEFT_UPPER );
ObjectSetInteger ( 0, sellbutton, OBJPROP_COLOR , clrWhite );
ObjectSetInteger ( 0, sellbutton, OBJPROP_BGCOLOR , clrMaroon );
ObjectSetInteger ( 0, sellbutton, OBJPROP_STATE , false );
ObjectSetInteger ( 0, sellbutton, OBJPROP_ZORDER , 1 );
Print( "ObjectsTotal: ", ObjectsTotal() );
return(0);
}
//---
//---
void OnTick()
{
//---
//---
return;
}
//---
//---
void OnDeinit(const int reason)
{
//---
ObjectsDeleteAll( 0, prfx );
//---
return;
}
//---
//---
void OnChartEvent(const int id ,
const long& lparam ,
const double& dparam ,
const string& sparam
)
{
// Sell
if ( sparam == sellbutton )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
ticket = Orderfuntions( sellbutton );
}
return;
}
//---
//---
void SellCalcSLTP()
{
//---
if ( stoploss_on == true )
{
if ( OrderType() == OP_SELL ) sl = OrderOpenPrice() - pips_to_change( stoploss );
if ( OrderType() == OP_BUY ) sl = OrderOpenPrice() + pips_to_change( stoploss );
result = OrderModify( OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, CLR_NONE );
if ( result && sound_use ) PlaySound( sounduse );
}
//---
return;
}
//---
//---
int Orderfuntions( string _Order_selector )
{
// Sell Order
SellCalcSLTP();
if ( _Order_selector == sellbutton )
{
ticket = OrderSend( _Symbol, OP_SELL, lot, Bid, slippage, sl, takeprofit, "comment", magic, 0, clrMaroon );
}
return(ticket);
}
Sembra ok, ma non puoi usare ordermodify così, devi prima selezionare un ordine con la funzione OrderSelect().