Thema: Hedge EA
Einzelnen Beitrag anzeigen
  #39 (permalink)  
Alt 01.02.21
MA-EA MA-EA ist offline
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Dann scheint das mit

Code:
NormalizeDouble( xy * Point , Digits )
wohl richtig zu sein. Hoffe ich.

Ob man bei OrderSend() / OrderClose() beim Price Ask, Bid, NULL oder 5*3-100 einträgt, scheint egal zu sein. Manchmal macht das Ding seinen Job, manchmal nicht.

Im Anhang die neueste Version. Hat vorhin wieder manchmal nicht gemacht, was sie soll. Hab versucht, nen paar Sachen besser zu machen, aber keine Ahnung, was das Ding im Anhang anstellt oder nicht. Bin für jegliche Hinweise, Tipps, Anregungen, Kritiken, was auch immer, dankbar.
Code:
//=============================================================================================================
// E I N S T E L L U N G E N
//=============================================================================================================
extern string esMN="Magic Numbers";
extern int MN_FiSel=12;
extern int MN_FiBuy=34;
extern int MN_NeSel=56;
extern int MN_NeBuy=78;
//-----------------------------------------------------------------------------------------------------------*/
extern string esOOFT1="Open Orders";
extern string esOOFT2="from/till Hour";
extern string esOOFT3="(Server Time)";
extern int FromH=5;//  Vor 5 Uhr starten scheint sich nicht zu lohnen.
extern int TillH=15;// Zum Testen bis einschließlich 15 Uhr öffnen lassen.
//-----------------------------------------------------------------------------------------------------------*/
extern string esTF="TimeFrame";
input ENUM_TIMEFRAMES TF=15;// Zum Testen M15
//-----------------------------------------------------------------------------------------------------------*/
extern int Slippage=12345;
//-----------------------------------------------------------------------------------------------------------*/
extern int SL=375;// ?
//-----------------------------------------------------------------------------------------------------------*/
extern int TP=275;// ?
//-----------------------------------------------------------------------------------------------------------*/
extern string esIITCBSMS1="if IsTradeContexBusy()";
extern string esIITCBSMS2="sleep MS";
extern int slMS=40;// Zum Testen 40ms
//-----------------------------------------------------------------------------------------------------------*/
extern string esDOONO1="Dist to OrderOpenPrice()";
extern string esDOONO2="open next Order";
extern int D_ONO=25;// Zum Testen 25
//-----------------------------------------------------------------------------------------------------------*/
extern string esDOCAO1="Dist to OrderOpenPrice()";
extern string esDOCAO2="close all Orders";
extern int D_CAO=50;// Zum Testen 50
//-----------------------------------------------------------------------------------------------------------*/
extern int OrdersNeed_Multi=2;// Zum Testen 2. 1-4?
//-----------------------------------------------------------------------------------------------------------*/
extern double Lots=0.01;
//=============================================================================================================
// G L O B A L E   D E K L A R A T I O N E N
//=============================================================================================================
bool
fiSH,fiLO,neSH,neLO,
OC
;
//-----------------------------------------------------------------------------------------------------------*/
double
SL_Sel,SL_Buy,TP_Sel,TP_Buy,MSL,
FiSel_DON_Sel,FiBuy_DON_Buy,

NeSel_DON_Sel,NeSel_DON_Buy,NeBuy_DON_Sel,NeBuy_DON_Buy,

FiSel_DCAO,FiBuy_DCAO
;
//-----------------------------------------------------------------------------------------------------------*/
int
MI_DIG,
TI_FiSel,TI_FiBuy,TI_NeSel,TI_NeBuy,
i,j,k,l,m,n,o,p,q,r,s,t,u,
Opened_Sel,Opened_Buy,
Need_Sel,Need_Buy
;
//=============================================================================================================
// I N I T
//=============================================================================================================
void OnInit(){ChartSetSymbolPeriod(0,NULL,TF);}
//=============================================================================================================
// E A   F U N K T I O N E N   S T A R T
//=============================================================================================================
void OnTick(){
//=============================================================================================================
// M A R K E T   I N F O
//=============================================================================================================

MI_DIG=MarketInfo(Symbol(),MODE_DIGITS);

//=============================================================================================================
// S T O P   L O S S
//=============================================================================================================
//SL auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(SL<1){
SL_Sel=0.0;
SL_Buy=0.0;}
if(SL>=1){
SL_Sel=NormalizeDouble(Bid+SL*Point,Digits);
SL_Buy=NormalizeDouble(Ask-SL*Point,Digits);}
//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist:
MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(SL_Sel<MSL)SL_Sel=MSL;
if(SL_Buy<MSL)SL_Buy=MSL;
//=============================================================================================================
// T A K E   P R O F I T
//=============================================================================================================
//TP auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(TP<1){
TP_Sel=0.0;
TP_Buy=0.0;}
if(TP>=1){
TP_Sel=NormalizeDouble(Bid-TP*Point,Digits);
TP_Buy=NormalizeDouble(Ask+TP*Point,Digits);}
//=============================================================================================================
// O R D E R   S E A R C H   1
//=============================================================================================================
fiSH=false;
neSH=false;
fiLO=false;
neLO=false;
for(i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FiSel)fiSH=true;
if(OrderMagicNumber()==MN_NeSel)neSH=true;
if(OrderMagicNumber()==MN_FiBuy)fiLO=true;
if(OrderMagicNumber()==MN_NeBuy)neLO=true;}}}
//=============================================================================================================
// O P E N   F I R S T   S E L L / O P E N   F I R S T   B U Y
//=============================================================================================================
//Wenn gar keine Orders offen sind...
if(fiSH==false&&fiLO==false&&neSH==false&&neLO==false){
//...alle Zähler auf 0 setzen...
Opened_Sel=0;
Opened_Buy=0;
Need_Sel=0;
Need_Buy=0;
//...und wenn zur Zeit Orders geöffnet werden dürfen, FirstSel und FirstBuy öffnen.
if(Hour()>=FromH&&Hour()<=TillH){
if(IsTradeAllowed()==true)TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FiSel,Blue);
if(IsTradeContextBusy()==true)Sleep(slMS);
if(IsTradeAllowed()==true)TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FiBuy,Blue);
if(IsTradeContextBusy()==true)Sleep(slMS);}}// Gar keine Orders offen.
//=============================================================================================================
// O R D E R   S E A R C H   2
//=============================================================================================================
fiSH=false;
neSH=false;
fiLO=false;
neLO=false;
for(j=OrdersTotal()-1;j>=0;j--){
if(OrderSelect(j,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FiSel)fiSH=true;
if(OrderMagicNumber()==MN_NeSel)neSH=true;
if(OrderMagicNumber()==MN_FiBuy)fiLO=true;
if(OrderMagicNumber()==MN_NeBuy)neLO=true;}}}
//-----------------------------------------------------------------------------------------------------------*/
// Wenn FirstSel und FirstBuy offen sind...
if(fiSH==true&&fiLO==true){
//=============================================================================================================
//O P E N   N E X T   S E L   B Y   F I R S T   S E L
//=============================================================================================================
//...wenn noch kein NextSel offen ist...
  if(neSH==false){

//  ...FirstSel auswählen:
    if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){
    if(OrderSymbol()==Symbol()){

//    Wenn FirstSel unter D_ONO ist... 
      FiSel_DON_Sel=NormalizeDouble(OrderOpenPrice()-D_ONO*Point,Digits);
      if(Bid<=FiSel_DON_Sel){

//      ...erste NextSels öffnen.
        for(k=OrdersNeed_Multi;k>=1;k--){
          if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,Blue);
          if(IsTradeContextBusy()==true)Sleep(slMS);
          Opened_Sel++;
          Need_Sel=OrdersNeed_Multi*Opened_Sel;
          Need_Buy=OrdersNeed_Multi*Need_Sel;
  } } } } }// noch kein NextSel offen.
//=============================================================================================================
//O P E N   N E X T   B U Y   B Y   F I R S T   B U Y
//=============================================================================================================
//...wenn noch kein NextBuy offen ist...
  if(neLO==false){

//  FirstBuy auswählen:
    if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
    if(OrderSymbol()==Symbol()){

//    Wenn FirstBuy über D_ONO ist...
      FiBuy_DON_Buy=NormalizeDouble(OrderOpenPrice()+D_ONO*Point,Digits);
      if(Ask>=FiBuy_DON_Buy){

//      ...erste NextBuys öffnen.
        for(l=OrdersNeed_Multi;l>=1;l--){
          if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,Blue);
          if(IsTradeContextBusy()==true)Sleep(slMS);
          Opened_Buy++;
          Need_Buy=OrdersNeed_Multi*Opened_Buy;
          Need_Sel=OrdersNeed_Multi*Need_Buy;
  } } } } }// Noch kein NextBuy offen.
//-----------------------------------------------------------------------------------------------------------*/
}// FirstSel und FirstBuy offen nach Order Search 2
//=============================================================================================================
// O R D E R   S E A R C H   3
//=============================================================================================================
fiSH=false;
neSH=false;
fiLO=false;
neLO=false;
for(m=OrdersTotal()-1;m>=0;m--){
if(OrderSelect(m,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FiSel)fiSH=true;
if(OrderMagicNumber()==MN_NeSel)neSH=true;
if(OrderMagicNumber()==MN_FiBuy)fiLO=true;
if(OrderMagicNumber()==MN_NeBuy)neLO=true;}}}
//Wenn FirstSel und FirstBuy offen sind...
if(fiSH==true&&fiLO==true){
//und NextSel und/oder NextBuy offen ist...
  if(neSH==true||neLO==true){
//=============================================================================================================
// S E L E C T   N E X T   S E L
//=============================================================================================================
//  ...letzten NextSel raus suchen:
    if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){
    if(OrderSymbol()==Symbol()){
//=============================================================================================================
//    O P E N   M O R E   B U Y   B Y   N E X T   S E L
//=============================================================================================================
//    Wenn NextSel über NextBuy-D_ONO ist...
      NeSel_DON_Buy=NormalizeDouble(OrderOpenPrice()+D_ONO*Point,Digits);
      if(Ask>=NeSel_DON_Buy){// Ask oder Bid ?

//      ...FirstBuy auswählen:
        if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
        if(OrderSymbol()==Symbol()){

//        Wenn FirstBuy Gewinn-Dist nicht erreicht hat...
          FiBuy_DCAO=NormalizeDouble(OrderOpenPrice()+D_CAO*Point,Digits);
          if(Bid<FiBuy_DCAO){

//          ...weitere Buy-Orders by NextSel öffnen:
            for(p=Need_Buy;p>=1;p--){
              if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,Blue);
              if(IsTradeContextBusy()==true)Sleep(slMS);
              Opened_Buy++;
              Need_Buy=OrdersNeed_Multi*Opened_Buy;
              Need_Sel=OrdersNeed_Multi*Need_Buy;}
      } } } }// letzter NextSel über D_ONO (open more NextBuy)
//=============================================================================================================
//    O P E N   M O R E   S E L    B Y   N E X T  S E L
//=============================================================================================================
//    Wenn letzter NextSel unter D_ONO ist...
      NeSel_DON_Sel=NormalizeDouble(OrderOpenPrice()-D_ONO*Point,Digits);
      if(Bid<=NeSel_DON_Sel){

//      ...FirstSel raus suchen...
        if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){
        if(OrderSymbol()==Symbol()){

//        Wenn FirstSel Gewinn-Dist nicht erreicht hat...
          FiSel_DCAO=NormalizeDouble(OrderOpenPrice()-D_CAO*Point,Digits);
          if(Ask>FiSel_DCAO){

//          ...weitere SelOrders öffnen.
            for(n=Need_Sel;n>=1;n--){
              if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,Blue);
              if(IsTradeContextBusy()==true)Sleep(slMS);
              Opened_Sel++;
              Need_Sel=OrdersNeed_Multi*Opened_Sel;
              Need_Buy=OrdersNeed_Multi*Need_Sel;
      } } } } }// FirstSel hat Gewinn-Dist nicht erreicht. Weitere Sel öffnen.
//=============================================================================================================
//        C L O S E   A L L   B Y   S E L
//=============================================================================================================//
//        Wenn FirstSel Gewinn-Dist doch erreicht hat alle Orders schließen.
          if(Ask<=FiSel_DCAO){
          for(o=OrdersTotal()-1;o>=0;o--){
          if(OrderSelect(o,SELECT_BY_POS)){
          if(OrderSymbol()==Symbol()){
          if(OrderMagicNumber()==MN_FiBuy
           ||OrderMagicNumber()==MN_NeBuy
           ||OrderMagicNumber()==MN_FiSel
           ||OrderMagicNumber()==MN_NeSel){
          if(IsTradeAllowed()==true)OC=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Red);
          if(IsTradeContextBusy()==true)Sleep(slMS);} } } } }// FiSel hat CAO-Dist erreicht.
//-----------------------------------------------------------------------------------------------------------*/
    } }// Nach Order Search 3 NextSel ausgewählt.
//=============================================================================================================
//  S E L E C T   N E X T   B U Y
//=============================================================================================================
//  ...letzten NextBuy auswählen:
    if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){
    if(OrderSymbol()==Symbol()){
//=============================================================================================================
//    O P E N   M O R E   S E L   B Y   L A S T   B U Y
//=============================================================================================================
//    Wenn letzter NextBuy unter D_ONO ist... 
      NeBuy_DON_Sel=NormalizeDouble(OrderOpenPrice()-D_ONO*Point,Digits);
      if(Bid<=NeBuy_DON_Sel){

//      ...FirstSel raus suchen...
        if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){
        if(OrderSymbol()==Symbol()){

//        Wenn FirstSel Gewinn-Dist nicht erreicht hat...
          FiSel_DCAO=NormalizeDouble(OrderOpenPrice()-D_CAO*Point,Digits);
          if(Ask>FiSel_DCAO){

//          ...weitere SelOrders öffnen.
            for(n=Need_Sel;n>=1;n--){
              if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,Blue);
              if(IsTradeContextBusy()==true)Sleep(slMS);
              Opened_Sel++;
              Need_Sel=OrdersNeed_Multi*Opened_Sel;
              Need_Buy=OrdersNeed_Multi*Need_Sel;
      } } } } }// Nach OrderSearch 3 NextBuy unter Dist-ONO.
//=============================================================================================================
//    O P E N   M O R E   B U Y   B Y   L A S T   B U Y
//=============================================================================================================
//    Wenn letzter NextBuy über D_ONO ist... 
      NeBuy_DON_Buy=NormalizeDouble(OrderOpenPrice()+D_ONO*Point,Digits);
      if(Ask>=NeBuy_DON_Buy){

//      Prüfen, ob FirstBuy Gewinn-Dist erreicht hat:
        if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
        if(OrderSymbol()==Symbol()){

//        Wenn FirstBuy Gewinn-Dist nicht erreicht hat...
          FiBuy_DCAO=NormalizeDouble(OrderOpenPrice()+D_CAO*Point,Digits);
          if(Bid<FiBuy_DCAO){

//          ...weitere Buy-Orders öffnen:
            for(p=Need_Buy;p>=1;p--){
              if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,Blue);
              if(IsTradeContextBusy()==true)Sleep(slMS);
              Opened_Buy++;
              Need_Buy=OrdersNeed_Multi*Opened_Buy;
              Need_Sel=OrdersNeed_Multi*Need_Buy;
      } } } } }// FirstBuy hat Gewinn-Dist nicht erreicht.
//=============================================================================================================
//        C L O S E   A L L   B Y   F I R S T   B U Y
//=============================================================================================================
//        Wenn FirstBuy Gewinn-Dist doch erreicht hat alle Orders schließen.
          if(Bid>=FiBuy_DCAO){
          for(q=OrdersTotal()-1;q>=0;q--){
          if(OrderSelect(q,SELECT_BY_POS)){
          if(OrderSymbol()==Symbol()){
          if(OrderMagicNumber()==MN_FiSel
           ||OrderMagicNumber()==MN_NeSel
           ||OrderMagicNumber()==MN_FiBuy
           ||OrderMagicNumber()==MN_NeBuy){
          if(IsTradeAllowed()==true)OC=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Red);
          if(IsTradeContextBusy()==true)Sleep(slMS);} } } } }// FirstBuy hat Gewinn-Dist erreicht
//-----------------------------------------------------------------------------------------------------------*/
    } }// Nach Order Search 3 NextBuy ausgewählt.
//-----------------------------------------------------------------------------------------------------------*/
} }// Nach Order Search 3 NextSel und/oder NextBuy offen.
//=============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
}// void OnTick()
Angehängte Dateien
Dateityp: mq4 LoShD_Ti_v2.mq4 (40,8 KB, 1x aufgerufen)