Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

Mam problem

Ea otwiera nie ograniczoną ilosc tradow np 100 czy 200 i chciałbym, aby kazdy z osobna miał traling stop, TS jest ten sam dla kazdej tranzakcji.

NP jest 10 otwartych zlecen Buy na róznych poziomach jesli ktorys znich bedzie np na+ 10 pips to TS przestawia stopa.


TYlko niemam pomysłu jak wybrac te zlecenia i jesli jakies znich spełnia warunek to TS zaczynie działać

Mam jakis kod, ale niemam pomysłu dlaczego nie działa

Kod: Zaznacz cały

void TrailingPositionsBuy(int trailingStop) { 
   for(int i=0;i<OrdersTotal();i++) { 
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderComment()==Name_Expert) { 
            if(OrderType()==OP_BUY) { 
               if(Bid-OrderOpenPrice()>trailingStop*Point) { 
                  if(OrderStopLoss()<Bid-trailingStop*Point || OrderStopLoss()==0)   {
                     ModifyStopLoss(Bid-trailingStop*Point); }}}}}} 
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

1, jeśli chcesz różne Ts to musisz mieć tablice z tymi poziomami

może tam zapisuj jaki ma być poziom TS

Funkcja otwierająca zlecenia pobiera te wartości i wrzuca do pola komentarz (albo do magic czy to wprost czy dodając do jakiegoś ustalonego poziomu magic)

no i funkcja albo sprawdza komentarz i na tej podstawie zmiana TS, albo sprawdza magic i na tej podstawie zmenia TS

tak by było chyba najprościej
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

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

Nieprzeczytany post autor: Pierz Andrzej »

siersciuch pisze: TS jest ten sam dla kazdej tranzakcji.
Tig3r pisze:jeśli chcesz różne Ts to musisz mieć tablice z tymi poziomami
..................................................

dzisiaj juz jestem padniety ale sama funkcja wydaje sie byc ok ...
moze funkcja ModyfiStopLoss ??

pozdrawiam
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Ribelo
Stały bywalec
Stały bywalec
Posty: 44
Rejestracja: 18 lut 2010, 20:28

Nieprzeczytany post autor: Ribelo »

Głupie i kuriozalne pytanie.

Kod: Zaznacz cały

   
balbalbla

double GetRsi ( int tf, int period, int ap, int shift )
{
   return ( iRSI ( NULL, tf, period, ap, shift ) );
}//End double GetRsi(int tf, int period, int ap, int shift)

blablabla

static int RsiBars;
   if ( RsiBars != iBars ( NULL, RsiTf ) ) {
      RsiBars = iBars ( NULL, RsiTf );
      RsiVal = GetRsi ( RsiTf, RsiPeriod, RsiAppliedPrice, 0 );
      RsiValPrev = GetRsi(RsiTf, RsiPeriod, RsiAppliedPrice, 1);
   }//if ( RsiBars != iBars ( NULL, RsiTf ) )
jest sobie taki kod, który dla podanego okresu sprawdza wartość RSI z aktualnej świeczki oraz świeczki poprzedniej. Załóżmy, że na wykresie H1 sprawdza RSI 20 ze świeczek D1...

...i haczyk jest tu, że wartość RSI ze świeczki poprzedniej ni jak się ma do realnej wartości ze świeczki poprzedniej. Wygląda jakby RsiValPrev było wartością ze świeczki przesuniętej ale o świeczkę H1. Nie było by problemu, gdyby chociaż wartość RsiValPrev o 24 świeczki, się zgadzała z tym co widzę na wykresie.

Pytanie jest więc takie, jak uzyskać wartość RSI z zamknięcia poprzedniej świeczki o wyższym timeframie?

Pozdrawiam,
Ribelo.

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

Nieprzeczytany post autor: Pierz Andrzej »

sprawdz czy napewno RSiTf masz 1140 lub PERIOD_D1 dl inerwalu dziennego...

druga sprawa jezeli sprawdzasz z auktualnej swieczki to bezsensu jest blokowanie za pomoca RsiBars .....

pozdrawiam
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Ribelo
Stały bywalec
Stały bywalec
Posty: 44
Rejestracja: 18 lut 2010, 20:28

Nieprzeczytany post autor: Ribelo »

Na pewno mam RsiTf ustawione na 1140.

Na początku nie blokowałem odświeżania za pomocą RsiBars, ale myślałem, że to coś pomoże...bo.

Wartość RsiValPrev ciągle się zmieniała, a teoretycznie z ostatniej świeczki D1 powinna być stała. Rozumiem, że RsiVal się ciągle zmienia, gdyż aktualna świeczka D1 jeszcze się nie zamknęła.

jeśli zajdzie taka potrzeba mogę na szybko sklecić wskaźnik, który w formie tekstowej na ekranie pokazywał by wartość RSI, tak by każdy mógł zobaczyć o co mi chodzi.

EDIT.

Wartości mi się nie zgadzały, bo porównywałem różnice między zamkniętą aktualną świeczką D1 a poprzednią D1. Sam sobie odpowiedziałem na pytanie;P

Wniosek z tego taki, by nie brać się za logikę po 2 w nocy bo może być ciężko z klarownością myślenia.

pozdrawiam,
Ribelo.

jinx
Stały bywalec
Stały bywalec
Posty: 23
Rejestracja: 04 sty 2011, 21:02

Prośba o szkielet projektu

Nieprzeczytany post autor: jinx »

Witam,
mam prośbę,
mógłby ktoś wrzucić tu projekt Visual Studio (2008/2010) będący szkieletem dla DLL'ki użytej w indykatorze dla MT4?

posiłkując się tym:
http://www.forex-tsd.com/metatrader-4-m ... n-dll.html

próbowałem coś takiego:
w VS 2010 założyłem Projekt C++ Class Library

Kod: Zaznacz cały


#include "MT4Test.h"
#include "stdafx.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define MT4_EXPFUNC __declspec(dllexport)
MT4_EXPFUNC int __stdcall getVal(int i,int mod)
{
	return i%mod;
}
po kompilacji dll wrzuciłem do experts\libraries

w experts/include umieściłem plik DllTest.mqh

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                      DllTest.mq4 |
//|                      Copyright ˆ 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ˆ 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


//+------------------------------------------------------------------+
//| DLL imports                                                      |
//+------------------------------------------------------------------+
#import "user32.dll"
   int      SendMessageA(int hWnd,int Msg,int wParam,int lParam);

#import "MT4Test.dll"
   int      getVal(int i,int mod);
#import

//+------------------------------------------------------------------+
//| EX4 imports                                                      |
//+------------------------------------------------------------------+
#import "stdlib.ex4"
   string ErrorDescription(int error_code);
#import
//+------------------------------------------------------------------+
w experts/indicators umieściłem plik DllTest.mql

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                      DllTest.mq4 |
//|                      Copyright ˆ 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ˆ 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#include <DllTest.mqh>
#property indicator_buffers 1
#property indicator_color1 Orange
#property indicator_width1 1
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double MABuffer[];
int init()
  {
   IndicatorBuffers(1);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MABuffer);
   string short_name;
//---- indicator line
   
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//---- name for DataWindow and indicator subwindow label
   short_name="DllTest()";
   IndicatorShortName(short_name);
   SetIndexLabel(0,"NonLagMA");
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexDrawBegin(0,0);
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
      int    i,shift, counted_bars=IndicatorCounted(),limit;
    
      for(shift=Bars;shift>=0;shift--) 
      {	
	      MABuffer[shift]=getVal(shift,20);  
      }
   //----
   
   //----
      return(0);
  }
//+------------------------------------------------------------------+
po dodaniu wskaźnika (zaznaczyłem "Umożliw import DLL")
nic się nie rysuje

Jeśli linijkę

Kod: Zaznacz cały

 MABuffer[shift]=getVal(shift,20);
zastąpię przez

Kod: Zaznacz cały

 MABuffer[shift]=shift%20;

indykator rysuje śliczne ząbki (po przekompilowaniu i wrzuceniu jeszcze raz)
co robię źle?

Pozdrawiam

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

Jak uzyskać wartość %K i %D z stokastkika? np chce parównać dwie te wartości.
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

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

Nieprzeczytany post autor: personov »

Kod: Zaznacz cały

double iStochastic(string symbol, int timeframe, int %Kperiod, int %Dperiod, int slowing, int method, int price_field, int mode, int shift);
Przedostatnia wartość to identyfikator linii wskaźnika.
0 - linia bazowa
1 - linia sygnałowa.
Solą życia jest kasa.

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

personov pisze:

Kod: Zaznacz cały

double iStochastic(string symbol, int timeframe, int %Kperiod, int %Dperiod, int slowing, int method, int price_field, int mode, int shift);
Przedostatnia wartość to identyfikator linii wskaźnika.
0 - linia bazowa
1 - linia sygnałowa.

Kod: Zaznacz cały

double stokbaz = iStochastic(NULL,0,K,D,S,MODE_SMA,0,0,1);
double stoksyg = iStochastic(NULL,0,K,D,S,MODE_SMA,0,1,1);
cos takiego?
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

ODPOWIEDZ