Warunek BUY MA

O jezykach programowania w platformach i nie tylko.
Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

Warunek BUY MA

Nieprzeczytany post autor: Kris82 »

Witam wszystkich.

Mam problem z otwieraniem pozycji SELL przy warunku jeżeli cena jest równa odległości 20 pipsów od MA.
Nie wiem co źle robie, ponieważ gdy ustawie warunek cena jest niższa lub równa odległości 20 pipsów od MA zlecenia zostają otwarte.

Kod: Zaznacz cały

extern int Period3=30;
extern int Deviations3=2;
extern double Lot = 0.01;
extern double StopLoss = 100;
extern double TakeProfit = 10;
 
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   double a = Ask;
   
   double ma;
   
  
   ma=iMA(NULL,0,Period3,Deviations3,MODE_SMA,PRICE_CLOSE,0);
   double midPrice = (ma - 20*Point);
 
   Alert ("cena midDistance: ",midPrice);
   
   if (a==midPrice)
   {
    OrderSend(Symbol(),1,Lot,Bid,2,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",0,Red); 
   }
   return(0);
  }

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: Warunek BUY MA

Nieprzeczytany post autor: Pierz Andrzej »

może broker jest z 3,5 cyframi po przecinku ?

proponował bym też zmienna ma wziąć w funkcje NormalizeDouble

no i może zamiast równe lepiej użyć jakiś przedział cenowy bo rzadko się może zdarzać ze cena jest równa ze średnią
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

Re: Warunek BUY MA

Nieprzeczytany post autor: Kris82 »

Broker jest z 4 miejscami po przecinki.
Dziękuje pomogło NormalizeDouble w przypadku równej ceny z wskaźnikiem
Ustawienie przedziału właśnie nic nie dało i tu gdzieś popełniam błąd.
W przypadku gdy jest

Kod: Zaznacz cały

   if (lowPrice > a && a < midPrice)
nie otwiera pozycji.

Kod: Zaznacz cały

extern int Period3=30;
extern int Deviations3=2;
extern double Lot = 0.01;
extern double StopLoss = 100;
extern double TakeProfit = 10;
 
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   double a = Ask;
   
   double ma;
   
  
   ma=iMA(NULL,0,Period3,Deviations3,MODE_SMA,PRICE_CLOSE,0);
    
   double midPrice = (NormalizeDouble(ma,Digits) - (20*Point));
   double lowPrice = (NormalizeDouble(ma,Digits) - (22*Point));
 
   Alert ("cena midDistance: ",midPrice);
   
   if (lowPrice > a && a < midPrice)
   {
    OrderSend(Symbol(),1,Lot,Bid,2,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",0,Red); 
   }
   return(0);
  }

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Re: Warunek BUY MA

Nieprzeczytany post autor: personov »

Przede wszystkim, niepoprawna składnia nawiasu OrderSend().
Gdzie rodzaj zlecenia ?

Kod: Zaznacz cały

OrderSend(Symbol(),OP_SELL,Lot,Bid,2,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",0,Red); 
Solą życia jest kasa.

Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

Re: Warunek BUY MA

Nieprzeczytany post autor: Kris82 »

Ta część kodu akurat jest poprawna

Kod: Zaznacz cały

OrderSend(Symbol(),1,Lot,Bid,2,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",0,Red);
1 to jest jak OP_SELL
0 to OP_BUY
2 to OP_BUYLIMIT
3 to OP_SELLLIMIT

i tak dalej, po prostu stosuje wartości zamiast pisać bo tak mi wygodniej a nie wpływa to na poprawność działania
Ale dzięki za uwagę :)

-- Dodano: sob 23-03-2013, 20:18 --

Już się dopatrzyłem gdzie mył błąd :)
Poprawna wersja to

Kod: Zaznacz cały

if ((lowPrice < a) && (a < midPrice))

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: Warunek BUY MA

Nieprzeczytany post autor: Pierz Andrzej »

Kod: Zaznacz cały

if (a >= lowPrice && a <= midPrice)
z poważaniem
Andrzej Pierz
FOREX-SERVICE

ODPOWIEDZ