Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43260
Benutzer: 7.223
Aktive Benutzer: 75
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 5 Tagen
- Sundaytrad...
vor 6 Tagen
- TS_6
vor einer Woche
- Mane
vor 3 Wochen
- AlbertZiz
vor 3 Wochen
- michak

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 431
Gesamt: 431
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 24.06.22
Mitglied
 
Registriert seit: Jun 2022
Beiträge: 42
TraderMike befindet sich auf einem aufstrebenden Ast
Standard

Globale Variablen sind hier die einfachste Lösung

Mike
  #12 (permalink)  
Alt 24.06.22
Neues Mitglied
 
Registriert seit: Sep 2021
Beiträge: 7
smilemore befindet sich auf einem aufstrebenden Ast
Standard

Hallo,
wie programmiere ich eine virtuelle Simulation?
Die Funktion OrderSend() führt ja reelle Trades aus?
Wie benutze ich OrderSend() für die virtuelle Simulation?
Oder geht das nicht über OrderSend()?
Ich muss doch den EA handeln lassen, ansonsten kann er ja keinen Gewinn oder Verlust machen, der EA soll aber bei Kontostand kleiner Ema20 nur noch virtuelle Trades machen?

Liebe Grüße

smilemore

Geändert von smilemore (24.06.22 um 11:38 Uhr)
  #13 (permalink)  
Alt 30.06.22
Mitglied
 
Registriert seit: Jun 2011
Ort: Minsk, Weißrussland
Beiträge: 87
Bobs befindet sich auf einem aufstrebenden Ast
Standard

Für die virtuelle Simulation muss man eigenen Funktionen erstellen (z.B. virtuelleOrderSend(), virtuelleOrderClose()). Diese Funktionen führen Aufzeichnungen für die virtuelle Simulation (in eine Datei oder in GV).
EA berechnet Ema20 basierend auf virtueller Stimulation.
Wenn der virtuelle Kontostand höher ist als Ema20, sendet EA gleichzeitig virtuelleOrderSend() und OrderSend().
  #14 (permalink)  
Alt 30.06.22
Neues Mitglied
 
Registriert seit: Sep 2021
Beiträge: 7
smilemore befindet sich auf einem aufstrebenden Ast
Standard

Hallo liebes Forum,

vorerst habe ich folgende Idee:
Jede geöffnete Order bekommt als Kommentar die virtuelle Lotsize, sollte der Ema_Kontostand unterschritten werden, wird mit kleinstmöglicher Lotsize gehandelt, die Simulation geht über die Lotsize die Im Orderkommentar abgespeichert wird. Alle geschlossenen Orders werden in einem Pool, absteigend sortiert, ein Array arr_orderticket soll das Orderticket aus dem Pool abspeichern sofern es in arr_ordericket noch nicht enthalten ist. Wenn das passiert weiß der EA er muss den EMA_Kontostand und die virtuelle Balance neu berechnen, soweit die Theorie.
Aber arr_ordeticket hat immer den Anfangswert -3, es wird also bis jetzt in das arr_orderticket kein Orderticket aus dem Pool gespeichert

PHP-Code:
#property strict
//https://www.forexfactory.com/thread/230203-how-do-i-stop-trading-for-half-hour
#include <MQL4OrderPool.mqh> 

//Virtuelle AccountBalance
double v_Balance=AccountBalance();
input int ema_period_acccount=20;

//https://tradistats.com/exponentieller-gleitender-durchschnitt/
double sf=2/(ema_period_acccount +1);
double ema_acccountAccountBalance();


int arr_orderticket[1]={-3};     //-3 um zu sehen falls nicht gespeichert wurde
MQL4OrderPool pool

int OnInit()
{
   
pool.Init(Symbol(),magic_number,MODE_HISTORY,ORDERS_FILLED,SORT_CLOSE_TIME_DESCENDING);
   return(
INIT_SUCCEEDED);
}
void OnTick(){
pool.Init(_Symbol,MAGIC,MODE_HISTORY,ORDERS_FILLED,SORT_CLOSE_TIME_DESCENDING);     //Geschlossen Order sind absteigend sortiert
pool.Refresh();

                            
for(
int i=0;i<pool.Total();i++){
   Print(
"Array pool_",,"     "pool[i].OrderTicket() );

      
   
//arr_orderticket sortieren
   
ArraySort(arr_orderticket ,WHOLE_ARRAY,0,MODE_ASCEND);
               for(
int i=0;i<ArraySize(arr_orderticket);i++) printf("arr_orderticket[%d] = %d",i,arr_orderticket[i]);
               
   
   
// Wenn Orderticket aus Pool nicht in arr_orderticket ist, dann speichere es dort ab
   
if(   ArrayBsearch(arr_orderticketpool[i].OrderTicket(),WHOLE_ARRAY,0,MODE_DESCEND) < -1  ){                         
         
      
// Falls arr_orderticket nur einen Inhalt hat, also die -3 speicheere Ticket aus Pool in arr_orderticket[0]
      //Muss so gemacht werden, da Ema_Kontostand als ersten Wert die AccountBalance() bekommt, danach wird Ema_Kontostand nach Formel berechnet
      
if(ArraySize(arr_orderticket) == 1){
            
arr_orderticket[0]= pool[i].OrderTicket();
                
             
//v_Balance updaten
            // jede geöffnete Order hat im Kommentar die simulierte Ordersie
            
if(pool[i].OrderLots() == StringToDoublepool[i].OrderComment() ) ){
                  
v_Balance=v_Balance pool[i].OrderProfit();
             
                  
//ema_acccount updaten          
                  
ema_acccountsf*v_Balance +(1-sf)* ema_acccount;     
                  
                  
            }
            
//Balance ist unter Ema_Kontostand gefallen,
            //Die Simulation erfolgt über die Lotsize aus dem Kommentar
            //tatsächliche Lotszie die real gehandelt wird ist die kleinstmögliche Lotsize      
            
if(pool[i].OrderLots() != StringToDoublepool[i].OrderComment() ) )
                  
//dann ist reale Lotgröße 0.1
                  
if(pool[i].OrderLots() == 0.1 ){
                        
v_Balance=v_Balance  pool[i].OrderProfit() *( StringToDoublepool[i].OrderComment() )/pool[i].OrderLots() );
                        
                        
//ema_acccount updaten          
                        
ema_acccountsf*v_Balance +(1-sf)* ema_acccount;
                        
                  
                  }
           
// Vergrößere arr_orderticket um einen Wert
           
arrayPusharr_orderticket, -); 
      }
         
         
         
      
// arr_orderticket enthält min. ein OrderTicket aus dem Pool
      
if(ArraySize(arr_orderticket) > 1){
         
// speichere an Letzte Stelle das Orderticket aus dem Pool, das in arr_orderticket noch nicht enthalten ist
         
arr_orderticket[ArraySize(arr_orderticket)-1]= pool[i].OrderTicket();
         
// vergrößere arr_orderticket um eins
         
arrayPusharr_orderticket, -); 
   
   
         
//v_Balance updaten
         // jede geöffnete Order hat im Kommentar die simulierte Ordersie
         
if(pool[i].OrderLots() == StringToDoublepool[i].OrderComment() ) ){
               
v_Balance=v_Balance pool[i].OrderProfit();
          
               
//ema_acccount updaten          
               
ema_acccountsf*v_Balance +(1-sf)* ema_acccount;      
         }
               
         if(
pool[i].OrderLots() != StringToDoublepool[i].OrderComment() ) )
            
//dann ist reale Lotgröße 0.1
            
if(pool[i].OrderLots() == 0.1 ){
                  
v_Balancev_Balance pool[i].OrderProfit() *( StringToDoublepool[i].OrderComment() )/pool[i].OrderLots() );
                  
                  
//ema_acccount updaten          
                  
ema_acccountsf*v_Balance +(1-sf)* ema_acccount;
            }
      }
                     
              
   }
// if(   ArrayBsearch(arr_orderticket, pool[i].OrderTicket(),WHOLE_ARRAY,0,MODE_DESCEND) < -1  ){     
}//for(int i=0;i<pool.Total();i++){
}//OnTick()

// Helper function to "push" to array
void arrayPush(int & array[] , int dataToPush){
    
int count ArrayResize(array, ArraySize(array) + 1);
    array[
ArraySize(array) - 1] = dataToPush;

Habe nun schon Stunden investiert, aber komme einfach nicht weiter. Vielleicht weiß ja einer warum das noch nicht richtig funktiniert. Um Hilfe bin ich dankbar.

Liebe Grüße smilemore

Geändert von smilemore (30.06.22 um 11:40 Uhr)
Thema geschlossen

Lesezeichen

Stichworte
ea abschalten, wieder einschalten


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 15:26 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------