
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
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
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 CJACiao 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
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,
RobertGrazie 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.
Intendi come salvare in un file CSV?
Controlla questo:
Strumenti - Lettore .csvCiao, 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]);
}
}
}