[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 697

 
rensbit:
L'angolo dell'ancora è da quale angolo verrà contata la posizione dell'oggetto nella finestra. Gli angoli sono contati in senso orario da sinistra a destra.

Se faccio lo snap all'angolo in basso a destra, allora cosa, devo impostare coordinate negative?
 
valenok2003:

Se faccio lo snap all'angolo in basso a destra, devo impostare delle coordinate negative?
No, coordinate positive, il terminale calcola da solo il punto desiderato. Per esempio: 15 pixel dal 2° angolo
 
Azerus:

Si prega di avvisare,

Per calcolare il numero di eventi continui (ad esempio il numero di barre in una serie in cui la chiusura è superiore all'apertura e viceversa), ho potuto solo ottenere quanto segue:

Due domande (se quanto sopra ha senso): (1) come resettare la lettura del contatore se la serie continua si è fermata; e (2) come scrivere correttamente Buffer[i] - cioè come posso "vedere" il risultato stesso?

Cioè, se l'indicatore di una certa barra mostra "-3", significa che è la terza barra di seguito che ha chiuso sotto l'apertura; se la barra successiva chiude sopra l'apertura, l'indicatore mostrerà "1" ......

int i=Bars-1

mentre (i > 0) {

int x=0;

int y=0;

if ( Close[i] > Open[i] ) { x++ ;

Buf [i]= x; }

se (Close[i] < Open[i] ) { y-- ;

Buf2[i] =y ; }

i--;

}

 
rensbit:
No, coordinate positive, il terminale calcolerà da solo il punto desiderato. Per esempio: 15 pixel da 2 angoli
Grazie, funziona.
 
artmedia70:
Mostra il tuo codice, per non indovinare


Realizzato nel programma Gorando, con l'aggiunta del tuo martin.

//+------------------------------------------------------------------+
//| Copyright 2005, Gordago Software Corp.
//| http://www.gordago.com/ |
//| versione 2.0 |
//+------------------------------------------------------------------+

#property copyright "Copyright 2005, Gordago Software Corp."
#proprietà link "http://www.gordago.com"

#define MIN_STOPLOSS_POINT 10
#define MIN_TAKEPROFIT_POINT 10
#define MAGIC 218650

extern string sNameExpert = "Generare da Gordago";
extern int nAccount =0;
extern double dBuyStopLossPoint = 0;
extern double dSellStopLossPoint = 0;
extern double dBuyTakeProfitPoint = 0;
extern double dSellTakeProfitPoint = 0;
extern double dBuyTrailingStopPoint = 0;
extern double dSellTrailingStopPoint = 0;
extern double Lot = 0,10;
extern int nSlippage = 30;
extern bool lFlagUseHourTrade = True;
extern inttern nFromHourTrade = 0;
extern intToHourTrade = 23;
extern bool lFlagUseSound = False;
extern string sSoundFileName = "alert.wav";
extern colorOpenBuy = Blue;
extern colorCloseBuy = Aqua;
extern colorOpenSell = Red;
extern colorCloseSell = Aqua;


void deinit() {
Commento(");
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start(){
se (lFlagUseHourTrade){
if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comment("Il tempo del commercio non è ancora arrivato!");
ritorno(0);
}
}

se(Bars < 100){
Stampa("barre inferiori a 100");
ritorno(0);
}

if(nAccount > 0 && nAccount != AccountNumber()){
Comment("Scambio sul conto: "+AccountNumber()+" FORBIDDEN!");
ritorno(0);
}

if((dBuyStopLossPoint > 0 && dBuyStopLossPoint < MIN_STOPLOSS_POINT) ||
(dSellStopLossPoint > 0 && dSellStopLossPoint < MIN_STOPLOSS_POINT)){
Print("StopLoss inferiore a " + MIN_STOPLOSS_POINT);
ritorno(0);
}
if((dBuyTakeProfitPoint > 0 && dBuyTakeProfitPoint < MIN_TAKEPROFIT_POINT) ||
(dSellTakeProfitPoint > 0 && dSellTakeProfitPoint < MIN_TAKEPROFIT_POINT)){
Print("TakeProfit inferiore a " + MIN_TAKEPROFIT_POINT);
ritorno(0);
}

double diOpen0=iOpen(NULL,60,0);
doppio d1=(0,00030);
doppio diHigh2=iHigh(NULL,60,0);
double diOpen3=iOpen(NULL,60,0);
doppio d4=(0,00030);
doppio diLow5=iLow(NULL,60,0);
double diOpen6=iOpen(NULL,60,1);
doppio diClose7=iClose(NULL,60,1);
double diOpen8=iOpen(NULL,60,2);
doppio diClose9=iClose(NULL,60,2);
double diOpen10=iOpen(NULL,60,0);
doppio d11=(0,00030);
doppio diHigh12=iHigh(NULL,60,0);
double diOpen13=iOpen(NULL,60,0);
doppio d14=(0,00030);
doppio diLow15=iLow(NULL,60,0);
double diOpen16=iOpen(NULL,60,1);
doppio diClose17=iClose(NULL,60,1);
double diOpen18=iOpen(NULL,60,2);
doppio diClose19=iClose(NULL,60,2);


if(AccountFreeMargin() < (1000*Lot)){
Print("Non abbiamo soldi. Free Margin = " + AccountFreeMargin());
ritorno(0);
}

bool lFlagBuyOpen = false, lFlagSellOpen = false, lFlagBuyClose = false, lFlagSellClose = false;

lFlagBuyOpen = (diOpen0+d1>diHigh2 && diOpen3-d4<diLow5 && diOpen6<diClose7 && diOpen8>diClose9);
lFlagSellOpen = (diOpen10+d11>diHigh12 && diOpen13-d14<diLow15 && diOpen16>diClose17 && diOpen18<diClose19);
lFlagBuyClose = False;
lFlagSellClose = False;

se (!ExistPositions()){

se (lFlagBuyOpen){
OpenBuy();
{ return(0);
}

se (lFlagSellOpen){
OpenSell();
ritorno(0);
}
}
if(ExistPositions()){
se(OrderType()==OP_BUY){
se(lFlagBuyClose){
bool flagCloseBuy = OrderClose(OrderTicket(), OrderLots(), Bid, nSlippage, colorCloseBuy);
se (flagCloseBuy && lFlagUseSound)
PlaySound(sSoundFileName);
ritorno(0);
}
}
se(OrderType()==OP_SELL){
se(lFlagSellClose){
bool flagCloseSell = OrderClose(OrderTicket(), OrderLots(), Ask, nSlippage, colorCloseSell);
se (flagCloseSell && lFlagUseSound)
PlaySound(sSoundFileName);
ritorno(0);
}
}
}

se (dBuyTrailingStopPoint > 0 || dSellTrailingStopPoint > 0){

per (int i=0; i<OrdersTotal(); i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
bool lMagic = true;
se (MAGIC > 0 && OrderMagicNumber() != MAGIC)
lMagic = false;

if (OrderSymbol()==Symbol() && lMagic) {
if (OrderType()==OP_BUY && dBuyTrailingStopPoint > 0) {
se (Bid-OrderOpenPrice() > dBuyTrailingStopPoint*Point) {
se (OrderStopLoss()<Bid-dBuyTrailingStopPoint*Point)
ModificaStopLoss(Bid-dBuyTrailingStopPoint*Point);
}
}
se (OrderType()==OP_SELL) {
se (OrderOpenPrice()-Ask>dSellTrailingStopPoint*Point) {
se (OrderStopLoss()>Ask+dSellTrailingStopPoint*Point || OrderStopLoss()==0)
ModificaStopLoss(Ask+dSellTrailingStopPoint*Point);
}
}
}
}
}
}
ritorno (0);
}

bool ExistPositions() {
per (int i=0; i<OrdersTotal(); i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
bool lMagic = true;

se (MAGIC > 0 && OrderMagicNumber() != MAGIC)
lMagic = false;

if (OrderSymbol()==Symbol() && lMagic) {
return(True);
}
}
}
return(false);
}

void ModifyStopLoss(double ldStopLoss) {
bool lFlagModify = OrderModify(OrderTicket(), OrderOpenPrice(), ldStopLoss, OrderTakeProfit(), 0, CLR_NONE);
se (lFlagModify && lFlagUseSound)
PlaySound(sSoundFileName);
}

//+----------------------------------------------------------------------------+
//| Autore: Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versione : 19.02.2008 |
//| Descrizione: restituisce il flag di perdita dell'ultima posizione.
//+----------------------------------------------------------------------------+
//| Parametri: |
//| sy - nome dello strumento (" - qualsiasi simbolo, |
//| NULL - simbolo corrente) |
| //| op - operazione (-1 - qualsiasi posizione) |
//| mn - MagicNumber (-1 - qualsiasi magia) |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
int i, j=-1, k=OrdersHistoryTotal();

if (sy=="0") sy=Symbol();
per (i=0; i<k; i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
se (OrderSymbol()==sy || sy==") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
se (op<0 || OrderType()==op) {
se (mn<0 || OrderMagicNumber()==mn) {
se (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
se (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
se (OrderProfit()<0) return(True)
}
return(False);
}





void OpenBuy(){
double dStopLoss = 0, dTakeProfit = 0;
doppio Lotti_Nuovo = Lotto;

se (isLossLastPos(NULL, -1, MAGIC))
Lotti_Nuovi *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))
Lotti_Nuovo = Lotto;


se (dBuyStopLossPoint > 0)
dStopLoss = Bid-dBuyStopLossPoint*Point;

se (dBuyTakeProfitPoint > 0)
dTakeProfit = Bid + dBuyTakeProfitPoint * Point;

int numorder = OrderSend(Symbol(), OP_BUY, Lots_New, Ask, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);

if (numorder > -1 && lFlagUseSound)
PlaySound(sSoundFileName);
}

void OpenSell() {
double dStopLoss = 0, dTakeProfit = 0;
doppio Lotti_Nuovo = Lotto;

se (isLossLastPos(NULL, -1, MAGIC))
Lotti_Nuovi *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))
Lotti_Nuovo = Lotto;

se (dSellStopLossPoint > 0)
dStopLoss = Ask+dSellStopLossPoint*Point;

se (dSellTakeProfitPoint > 0)
dTakeProfit = Ask-dSellTakeProfitPoint*Point;

int numorder = OrderSend(Symbol(),OP_SELL, Lots_New, Bid, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenSell);

if (numorder > -1 && lFlagUseSound)
PlaySound(sSoundFileName);
}

 
valenok2003:

Se non ti dispiace correggere l'esempio, non funziona per me per qualche motivo.
      ObjectSetText("info", str3, fontsize, fontname);
      ObjectSet("info", OBJPROP_CORNER, corner);
      ObjectSet("info", OBJPROP_XDISTANCE, xdistance);
      ObjectSet("info", OBJPROP_YDISTANCE, ydistance);
      ObjectSet("info", OBJPROP_COLOR, clr);

Ho reso l'angolo variabile esterno (per comodità). Contiene il numero dell'angolo da cui saranno calcolate le coordinate

 
Roger:


Prova a sostituire con

se (OrderStopLoss()<pp-(TStop.Buy+TrailingStep-1)*po||OrderStopLoss()==0)

a

se (OrderStopLoss()>pp-(TStop.Buy+TrailingStep-1)*po||OrderStopLoss()==0)

Roger, grazie, ma ancora non funziona correttamente. Ho provato un altro traino, ma l'errore è ancora lì :( C'è qualche differenza tra il traino di una posa e il traino di più pose allo stesso tempo?
 
rensbit:

Ho reso l'angolo variabile esterno (per comodità). Contiene il numero dell'angolo da cui saranno calcolate le coordinate

Grazie!

Un'altra domanda. Come inserire correttamente il simbolo di Wingdings nei commenti.

 
quale simbolo?
 
rensbit:
quale simbolo?

copyright