Come codificare? - pagina 265

 

numero di sottofinestra sconosciuto

Ciao colleghi codificatori

Qualcuno ha una soluzione a questo problema con le chiamate iCustom, ho provato tutto quello che posso pensare ma ho ancora lo stesso messaggio nella scheda Esperti.

numero di sottofinestra sconosciuto -1 per la funzione ObjectCreate

Saluti CJA

 

Rimuovere le chiamate alle sottofinestre nell'indicatore

cja:
Ciao colleghi codificatori

Qualcuno ha una soluzione a questo problema con le chiamate iCustom, ho provato tutto quello che posso pensare ma ho ancora lo stesso messaggio nella scheda Esperti.

numero di sottofinestra sconosciuto -1 per la funzione ObjectCreate

Saluti CJA

Ciao CJA,

Ho una soluzione che uso per aggirare questo problema.

L'indicatore che il tuo EA sta chiamando nell'iCustom sta cercando di trovare una sottofinestra per disegnare i suoi oggetti.

Nella maggior parte dei casi non hai bisogno che il tuo indicatore disegni qualcosa, ma solo che fornisca i valori dell'indicatore al tuo EA.

La mia soluzione è di fare una copia dell'indicatore e cancellare le chiamate alla sottofinestra e le routine di disegno degli oggetti.

Questo elimina gli errori di sottofinestra e rende anche l'EA più veloce.

Poi usa questo nuovo nome dell'indicatore nelle tue dichiarazioni iCustom per il tuo EA.

Sono sicuro che c'è probabilmente una soluzione di codice migliore, ma questo funziona per me.

Spero che questo aiuti,

Robert

 

Errori di sottofinestra iCustom

cosmiclifeform:
Ciao CJA,

Ho una soluzione che uso per aggirare questo problema.

L'indicatore che il tuo EA sta chiamando nell'iCustom sta cercando di trovare una sottofinestra per disegnare i suoi oggetti.

Nella maggior parte dei casi non hai bisogno che il tuo indicatore disegni qualcosa, ma solo che fornisca i valori dell'indicatore al tuo EA.

La mia soluzione è di fare una copia dell'indicatore e cancellare le chiamate alle sottofinestre e le routine di disegno degli oggetti.

Questo elimina gli errori di sottofinestra e rende anche l'EA più veloce.

Poi usa questo nuovo nome dell'indicatore nelle tue dichiarazioni iCustom per il tuo EA.

Sono sicuro che c'è probabilmente una soluzione di codice migliore, ma questo funziona per me.

Spero che questo aiuti,

Robert

Grazie Robert - il tuo suggerimento funziona, tuttavia ho il sospetto che ci debba essere qualche altro modo per farlo, anche se ho fatto una ricerca in rete e non ho trovato nessuna soluzione che funzionasse o avesse senso, solo un sacco di domande e nessuna risposta. Quindi grazie ancora una volta per il tuo aiuto.

Saluti CJA

 

CJA

Solo un suggerimento: perché non usate (quando chiamate con iCustom()) un parametro per passare il numero di finestra desiderato? Qualcosa come: se (ParameterWindowID>=0) allora è da iCustom altrimenti fai del codice di default.

In questo modo potreste forzarlo a disegnare gli oggetti anche quando viene chiamato da un altro codice e disegnerebbe gli oggetti in un posto corretto

 

Aiuto con la codifica

Ciao ragazzi.

Per favore, qualcuno può dirmi se è possibile usare BOLD textFONTtype nel rapporto degli avvisi e-mail? Se sì, come posso codificare questo?

Grazie mille per l'aiuto.

 
codersguru:
Intendi come salvare in un file CSV?

Controlla questo:

Strumenti - Lettore .csv

Ciao, Guru,

C'è un posto sul tuo sito web dove posso scaricare questa dll? Penso che questo sia uno strumento eccellente e sono abbastanza sicuro che tu possa scriverlo meglio di me, quindi non voglio disturbare. Grazie in anticipo.

Ho bisogno di registrarmi? Questo si trova sotto la sezione download ma non sono riuscito a capire come scaricare qualcosa.

 

rapida modifica EA

Ciao,

Ho bisogno di aiuto, ho provato a modificare il codice qui sotto ma l'EA continua a mandare in crash MT4.

Voglio che l'ordine si chiuda quando la barra corrente (quindi la barra dove è stato eseguito l'ordine) si chiude. Fondamentalmente commercio una barra.

Questo è il codice originale, fa trading da segnale a segnale.

//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy) |

//+------------------------------------------------------------------+

if (signaldown!=EMPTY_VALUE&&signaldown!=0) Order = SIGNAL_CLOSEBUY;

//+------------------------------------------------------------------+

//| Signal End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

//+------------------------------------------------------------------+

//| Signal Begin(Exit Sell) |

//+------------------------------------------------------------------+

if (signalup!=EMPTY_VALUE&&signalup!=0) Order = SIGNAL_CLOSESELL;

//+------------------------------------------------------------------+

//| Signal End(Exit Sell) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Signal Begin(Entry) |

//+------------------------------------------------------------------+

//if (timeprev!=Time[0]){

// timeprev = Time[0];

if (signalup!=EMPTY_VALUE&&signalup!=0)

{

Order = SIGNAL_BUY;

}

if (signaldown!=EMPTY_VALUE&&signaldown!=0){

Order = SIGNAL_SELL;

}

// }

//+------------------------------------------------------------------+

//| Signal End |

//+------------------------------------------------------------------+

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

//+------------------------------------------------------------------+

Qualcuno può aiutarmi?

 

Ho anche trovato questo codice,

if(data!=iTime(Symbol(),0,0))

{

if(signalup!=EMPTY_VALUE&&signalup!=0)

{

if(openpos()>0)

{

for(i=0;i<OrdersTotal();i++)

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Ask,slip))

Print("short was closed");

}

}

}

Print("try open long");

Print(Symbol());

nt=OrderSend(Symbol(),OP_BUY,lots,Ask,slip,0,0,"ab",mn,0,Green);

if(nt>0)

Print("long order was opened");

}

if(signaldown!=EMPTY_VALUE&&signaldown!=0)

{

if(openpos()>0)

{

for(i=0;i<OrdersTotal();i++)

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Bid,slip))

Print("long was closed");

}

}

}

Print("try open short");

Print(Symbol());

nt=OrderSend(Symbol(),OP_SELL,lots,Bid,slip,0,0,"ab",mn,0,Red);

if(nt>0)

Print("short was opened");

}

data=iTime(Symbol(),0,0);

}

//----

//----

return(0);

}

//+------------------------------------------------------------------+

int openpos()

{

int j=0;

int i,n;

n=OrdersTotal();

for(i=0;i<n;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==mn&&(OrderType()==OP_SELL||OrderType()==OP_BUY))

j++;

}

return(j);

Qualche esperto può dirmi quale è scritto meglio?

 

Breakeven per tutti gli ordini di una coppia (magia)

Ciao a tutti,

voglio raccogliere tutti gli ordini (buy&sell) di una coppia per magia e se raggiungono un pareggio, tutti gli ordini dovrebbero essere chiusi.

qualsiasi guida è molto gradita, grazie

extern bool PairBreakeven=true;// Breakeven per coppia tutti gli ordini della stessa coppia/magia

extern double Pairbreakevengain=6;// guadagno in pip richiesto per abilitare il break even

extern double Pairbreakeven=3;// break even, ordine chiuso, 3 pip profit/slippage

doppio Pairmovebreakeven;

if(PairBreakeven==true){

if(Pairbreakevengain>0)Pairmovebreakeven(Pairbreakevengain,Pairbreakeven);

CloseBuyOrders(Magic);

CloseSellOrders(Magic);

}

void Pairmovebreakeven(double Pairbreakevengain,double Pairbreakeven){

RefreshRates();

if(OrdiniTotali()>0){

for(int i=OrdersTotal();i>=0;i++){

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic ){

return;

}

}

}

}

int CloseBuyOrders(int Magic){ //op_sell è simile

int total=OrdersTotal();

for(int cnt=totale-1;cnt>=0;cnt--){

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderMagicNumber()==Magico && OrderSymbol()==Simbolo()){

if(OrderType()==OP_BUY){

OrderClose(OrderTicket(),OrderLots(),Bid,3*mt);

}

}

}

return(0);

}

 

ArraySort con 3 o più dimensioni.

Qualche esperto può aiutare in questo?

Ho provato a usare con successo arraysort per array di 1 o 2 dimensioni. Ma sono rimasto bloccato con la dimensione 3. Per quanto ne so, arraysort usa solo la prima colonna per l'ordinamento. Qualcuno può consigliare su come risolvere questo arraysorting con 3 o più dimensioni?

bool Restart = true;

double arraystore[20][20][20];

double ArrayActual[20] = {1.23,3.65,0.02,5.44,0.92,0.11,1.21,999.0,555.5,0.0001,44.221,1.01,0.002};

void init()

{

if (Restart == true)

{

Go();

Restart = false;

}

}

void start()

{

}

void Go()

{

for (int a = 1; a<=3; a++)

{

for (int b = 1; b<=6; b++)

{

int c = b+ (a-1)*6;

arraystore[a][0] = ArrayActual[c];

arraystore[a][1] = a;

arraystore[a][2] = b +a;

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

ArraySort(arraystore,WHOLE_ARRAY,1,MODE_DESCEND);

for ( a = 1; a<=3; a++)

{

for ( b = 1; b<=6; b++)

{

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

}